Twilio Messaging
Agenten mit eingehenden SMS/MMS-, WhatsApp- und RCS-Nachrichten starten und Antworten, Medien und genehmigte Vorlagen über Twilio senden.
Auf dieser Seite
| Modi | Inbound, Outbound |
| YAML-Typ | twilio_messaging |
| Zugangsdaten | Ein Kontozugang (Connection) vom Typ Twilio, den auch Twilio Voice nutzt |
| Bridge | Nicht unterstützt |
| Custom Domain | Nicht unterstützt |
| Verknüpfte Agenten | Einer oder mehrere. Eine eingehende Nachricht startet jeden verknüpften Agenten; bei Outbound legt jede Verknüpfung fest, wie ihr Agent sendet. |
| Während der Pause | Inbound: Twilio erhält eine leere TwiML-Antwort, und es startet kein Run. Die Nachricht wird weder gespeichert noch später zugestellt. Outbound: Es wird nichts gesendet. |
Einrichtung
Bereite den Absender in Twilio vor: eine Rufnummer mit SMS oder MMS oder einen registrierten WhatsApp- oder RCS-Absender. Gehört der Absender bei Inbound zu einem Messaging Service, stelle die Verarbeitung eingehender Nachrichten dort auf Defer to sender's webhook. Um WhatsApp ohne registrierten Absender zu testen, aktiviere die Twilio Sandbox und tritt ihr mit dem Testtelefon bei.
Öffne den Agenten. Klicke im Connector Flow für Inbound auf Add inbound connector oder für Outbound auf Add outbound connector. Klicke dann auf Create New Connector und wähle Twilio Messaging.
Wähle den Mode. Wähle unter Connection einen Twilio-Kontozugang oder lege einen mit Region, Account SID und dem Auth Token dieser Region an. Wähle den Channel und dann den Twilio sender. Absender, die die Verbindung nicht nutzen kann, etwa einer, an dem schon eine andere connic-Verbindung empfängt, erscheinen deaktiviert in der Liste und nennen den Grund. Bei Outbound kannst du einen Default recipient, eine Messaging Service SID und Vorgaben für Vorlagen setzen. Klicke auf Create.
Bei Inbound trägt connic den Webhook für eingehende Nachrichten am Absender in Twilio ein; siehe Einrichtung bei Twilio. Bei der WhatsApp Sandbox trägst du ihn selbst ein. Bei Outbound legst du fest, wie der Agent sendet: Automatic outbound connector, Agent-tool outbound connector oder Middleware outbound connector. Für Antworten wählst du Only selected inputs und die Inbound-Verbindung.
Sende eine Nachricht an den Absender und öffne den Run. Bei Outbound öffnest du den Run der Verbindung und suchst die zurückgegebene Message SID in den Messaging Logs von Twilio.
Im Code
Deklariere die Verbindungen in connectors/*.yaml. Setze Rufnummern und IDs in Anführungszeichen. Ohne sie liest YAML eine Nummer wie +14155550123 als Ganzzahl und das Deployment scheitert. Eine Inbound-Verbindung, die WhatsApp-Nachrichten empfängt:
type: twilio_messaging
mode: inbound
connection: support-twilio
config:
channel: whatsapp
sender: "whatsapp:+14155550123"
agents:
- messaging-assistantEine Outbound-Verbindung, die vom selben Absender antwortet:
type: twilio_messaging
mode: outbound
connection: support-twilio
config:
channel: whatsapp
sender: "whatsapp:+14155550123"
agents:
- name: messaging-assistant
outbound: { usage: automatic, source: [support-whatsapp] } # antwortet auf Runs der Inbound-DateiKonfiguration
Die Felder einer Twilio-Messaging-Verbindung, in connectors/*.yaml genauso wie in der REST API und connic MCP. Die Beschreibungen nennen die passende Einstellung im Dashboard. Felder, die alle Verbindungen gemeinsam haben, etwa agents und environments, beschreibt Verbindungen im Code.
| Feld | Typ | Status | Beschreibung |
|---|---|---|---|
| type | string | Erforderlich | twilio_messaging. |
| mode | string | Erforderlich | inbound oder outbound. Dashboard: Mode. |
| connection | string | Erforderlich | Name oder ID eines Twilio-Kontozugangs, der Region, Account SID und Auth Token enthält. Dashboard: Connection. |
| config | object | Erforderlich | Einstellungen für Twilio Messaging. |
| channel | string | Optional | Inbound und Outbound. sms für SMS und MMS, whatsapp oder rcs. Die Region des Kontozugangs muss den Kanal unterstützen; siehe Kanäle und Regionen. Dashboard: Channel.Standard: sms |
| sender | string | Erforderlich | Inbound und Outbound. Die Twilio-Adresse, an der die Verbindung empfängt oder von der sie sendet: für SMS eine Nummer im E.164-Format in Anführungszeichen wie "+14155550123", für WhatsApp die Nummer mit oder ohne Präfix whatsapp:, für RCS die Sender ID wie rcs:brand_agent. Der Absender muss im Konto und in der Region des Kontozugangs existieren, außer der WhatsApp Sandbox whatsapp:+14155238886. Dashboard: Twilio sender. |
| to | string | Optional | Outbound. Standardempfänger im Adressformat des Kanals. Ohne ihn antwortet die Verbindung auf eingehende Nachrichten; siehe Empfänger. Dashboard: Default recipient. |
| messaging_service_sid | string | Optional | Outbound. Ein Messaging Service, der den Absender enthält: MG, gefolgt von 32 Hexadezimalzeichen. connic übermittelt ihn zusammen mit dem Absender. Dashboard: Messaging Service SID. |
| content_sid | string | Optional | Outbound. Standardvorlage: HX, gefolgt von 32 Hexadezimalzeichen. Solange sie gesetzt ist, verwendet jede Nachricht die Vorlage; siehe WhatsApp-Vorlagen. Dashboard: Default Content Template SID. |
| content_variables | object | Optional | Outbound. Standardvariablen der Vorlage: String-Werte mit der Variablennummer als Schlüssel, etwa {"1": "Alex"}. Setze Schlüssel und Werte in Anführungszeichen. Braucht content_sid. Dashboard: Default template variables, als JSON. |
Kontozugang
Ein Twilio-Kontozugang enthält die Zugangsdaten des Kontos und kann beliebig viele Verbindungen für Twilio Messaging und Twilio Voice bedienen. Kanal und Absender gehören zu jeder einzelnen Verbindung. Mit den Zugangsdaten listet connic Absender auf, setzt Webhooks und sendet Nachrichten; mit dem Auth Token prüft connic die Signatur jeder Anfrage von Twilio.
| Einstellung | Beschreibung |
|---|---|
| Region | US1 (USA), IE1 (Irland) oder AU1 (Australien). Standard ist US1. US1 unterstützt alle Kanäle, IE1 nur SMS-Text, AU1 kein Messaging. |
| Account SID | Die Kennung des Twilio-Kontos, beginnend mit AC. Das Konto muss aktiv sein. |
| Auth Token | Der Auth Token der gewählten Region, keine API-Key-SID und kein API-Key-Secret. Twilio-Zugangsdaten gelten je Region; siehe Manage Regional API Credentials. |
Erzeugte Werte
connic setzt diese Werte beim Anlegen der Verbindung oder wenn sich der Absender ändert. Die Webhook-URL kopierst du aus dem Detailbereich. Sie gehören nicht in YAML-Dateien; connic lint lehnt sie ab.
| Wert | Modi | Beschreibung |
|---|---|---|
| Incoming-message webhook | Inbound | Die URL, an die Twilio eingehende Nachrichten sendet. connic trägt sie am Absender ein, außer bei der WhatsApp Sandbox. |
sender_sid | Inbound | Die Twilio-SID des Absenders: PN für eine Rufnummer, XE für einen WhatsApp- oder RCS-Absender. Bei der WhatsApp Sandbox nicht gesetzt. |
Agent-Input
Modi: Inbound
Twilio sendet jede eingehende Nachricht als signierten POST mit Formulardaten an den Webhook der Verbindung. connic prüft die Anfrage, reiht für jeden verknüpften Agenten einen Run ein und antwortet mit einer leeren TwiML-Antwort. Antworten an den Kunden sendet eine eigene Outbound-Verbindung. Der Run erhält:
{
"message_sid": "SM00000000000000000000000000000001",
"channel": "whatsapp",
"from": "whatsapp:+14155550124",
"to": "whatsapp:+14155550123",
"text": "Was ist der Status von Bestellung 12345?",
"conversation_id": "twilio_messaging:9e0f77d9-2fd8-5a8e-8d47-59fbf5b8a091",
"raw": {
"AccountSid": "AC00000000000000000000000000000000",
"MessageSid": "SM00000000000000000000000000000001",
"From": "whatsapp:+14155550124",
"To": "whatsapp:+14155550123",
"Body": "Was ist der Status von Bestellung 12345?",
"NumMedia": "0"
}
}message_sidist die Message SID von Twilio. Ein wiederholter Webhook für dieselbe Nachricht startet für einen Agenten keinen zweiten Run.fromist der Kunde undtoder Absender der Verbindung, bei WhatsApp und RCS mit dem Präfixwhatsapp:oderrcs:.textist der Nachrichtentext. Bei reinen Mediennachrichten ist er leer.rawenthält alle Formularfelder, die Twilio gesendet hat, einschließlich kanalspezifischer Felder.filesundfile_issueskommen hinzu, wenn die Nachricht Anhänge hat.
Anhänge
connic lädt eingehende Medien herunter und übergibt sie unter files. Jede Datei hat name (die Twilio-Media-SID mit Dateiendung), mime_type, Base64-kodierte data und size in Byte. Eine Nachricht nimmt bis zu 50 Dateien an, höchstens 32 MiB insgesamt. Downloads setzen einen US1-Kontozugang voraus.
Eine ungültige oder nicht abrufbare Datei lässt connic einzeln aus. Überschreitet eine Datei die Anzahl- oder Größengrenze, behält connic die Dateien davor und lässt diese und alle folgenden aus. file_issues nennt jede ausgelassene Datei mit code, Meldung und überschrittener Grenze, und die Logs der Verbindung erhalten eine Warnung. Der Run startet auch ohne angenommene Datei, außer Files required ist für die Verknüpfung des Agenten aktiviert. Der Agent sollte files und file_issues prüfen.
Gespräche
conversation_id bleibt gleich für jede Kombination aus Inbound-Verbindung, Konto, Region, Kanal, Absender und Kunde. Damit der Verlauf über mehrere Nachrichten erhalten bleibt, setze session.key auf input.conversation_id und deploye den Agenten erneut; Sessions sind standardmäßig aus. Ist eine automatische Outbound-Verbindung verknüpft, wird die Textausgabe des Agenten zur Antwort.
version: "1.0"
name: messaging-assistant
description: "Beantwortet eingehende Twilio-Nachrichten"
model: connic/gpt-5.6-terra
system_prompt: |
Beantworte die eingehende Nachricht klar und knapp.
Frage nach fehlenden Angaben, statt Annahmen zu treffen.
Gib die Antwort als reinen Text zurück.
session:
key: input.conversation_id
ttl: 86400Das Beispiel hält ein Gespräch 86.400 Sekunden lang. Die Session-Einstellungen beschreibt Agent YAML.
Einrichtung bei Twilio
Modi: Inbound
Beim Anlegen einer Inbound-Verbindung setzt connic den Webhook für eingehende Nachrichten am Absender auf die Webhook-URL der Verbindung mit HTTP POST. Bei einer Rufnummer entfernt connic außerdem eine Messaging-TwiML-App; bei einem WhatsApp- oder RCS-Absender bleiben Fallback- und Status-Callback-URL erhalten. Die Voice-Einstellungen der Nummer bleiben unverändert. Outbound-Verbindungen ändern in Twilio nichts.
- connic lehnt Absender ab, deren Webhook auf eine andere connic-Verbindung zeigt, Rufnummern ohne SMS (in US1 ohne SMS und MMS) und Absender in einem Messaging Service, der nicht auf Defer to sender's webhook steht.
- Beim Wechsel des Absenders setzt connic den Webhook am neuen Absender und entfernt ihn vom alten, sofern er dort noch auf diese Verbindung zeigt.
- Beim Löschen der Verbindung entfernt connic den Webhook, wenn er noch auf diese Verbindung zeigt. Gelingt das nicht, wird die Verbindung nicht gelöscht; prüfe den Absender in Twilio und versuche es erneut.
WhatsApp Sandbox
Für den Webhook der Sandbox bietet Twilio keine dokumentierte öffentliche API, deshalb trägst du ihn selbst ein. Lege die Verbindung mit dem Kanal WhatsApp und dem Absender WhatsApp Sandbox (activation required) an und kopiere den Incoming-message webhook aus dem Detailbereich. Füge die exakte URL in den Sandbox-Einstellungen von Twilio unter When a Message Comes in ein, wähle HTTP POST und speichere; siehe Twilios Anleitung für Sandbox-Webhooks. Wechselt die Verbindung zu einem anderen Absender oder löschst du sie, passt du die Sandbox-Einstellungen selbst an.
Kanäle und Regionen
Die Liste Twilio sender zeigt je nach Kanal die Rufnummern des Kontos mit SMS oder MMS oder seine WhatsApp- oder RCS-Absender. Jeder Eintrag nennt die Fähigkeiten der Nummer oder den Status des Absenders. RCS-Entwürfe bleiben für Tests auswählbar; ein Eintrag in der Liste bedeutet keine Freigabe für den Produktivbetrieb. Die Voraussetzungen beschreibt Twilios Anleitung für RCS-Tests und Freigaben.
Klicke auf Refresh, nachdem du in Twilio einen Absender hinzugefügt oder geändert hast. Fehlt ein gespeicherter Absender in der aktualisierten Liste, bleibt er als (current sender) sichtbar; prüfe ihn in Twilio. Ein Wechsel des Kontozugangs oder Kanals leert die Auswahl. Die Adressformate gelten für beide Modi:
| Kanal | Twilio-Absender | Kundenadresse | Region |
|---|---|---|---|
| SMS / MMS | +14155550123 | +14155550124 | US1; IE1 nur für SMS-Text, ohne +1-Rufnummern |
| whatsapp:+14155550123 | whatsapp:+14155550124 | US1 | |
| RCS | rcs:brand_xyz123_agent | rcs:+14155550124 | US1 |
Rufnummern verwenden das E.164-Format mit führendem + und Ländervorwahl. connic ergänzt ein fehlendes Präfix whatsapp: oder rcs:. Leite eingehende SMS der Nummer in Twilio an die gewählte Region, bevor du die Verbindung anlegst; die Region in connic ändert das Routing bei Twilio nicht. IE1 unterstützt keine +1-Rufnummern als Absender oder Empfänger; siehe Messaging-Funktionen in IE1. RCS-Nachrichten gehen an einen ausdrücklichen rcs:-Empfänger, die Verbindung weicht also nicht auf SMS aus. Die Einrichtung des Absenders beschreibt Twilios RCS-Anleitung.
Ausgehende Zustellung
Modi: Outbound
Eine Outbound-Verbindung sendet über die Messaging API von Twilio vom konfigurierten Absender, zusammen mit der Messaging Service SID, falls gesetzt. Sie sendet, wenn der Run eines verknüpften Agenten abgeschlossen ist, wenn das Modell sie als Tool aufruft oder wenn Middleware sie aufruft, je nach Nutzung der Verknüpfung.
Automatische Payload
Eine automatische Verknüpfung sendet die abschließende Ausgabe des Runs. Reiner Text wird zum Nachrichtentext. Ein JSON-Objekt kann die Felder der Agent-Tool-Payload unten enthalten; der Text darf auch in body, message, response oder output stehen.
Payload für Agent-Tool und Middleware
Das Modell oder die Middleware übergibt ein JSON-Objekt mit diesen Feldern. Unbekannte Felder führen zu einem Validierungsfehler. Eine Nachricht braucht Text, Medien oder eine Vorlage.
{
"text": "Deine Bestellung wurde verschickt.",
"to": "whatsapp:+14155550124",
"media_urls": ["https://example.com/shipping-label.png"]
}text: der Nachrichtentext, höchstens 1.600 Zeichen. Bei reinen Mediennachrichten optional.to: der Empfänger; siehe Empfänger.media_urls: 1 bis 10 öffentliche Medien-URLs; siehe Medien.content_sidundcontent_variables: eine Vorlage und ihre Variablen; siehe WhatsApp-Vorlagen.
Empfänger
connic sendet an den ersten Empfänger, den es findet:
toin der Payload oder in der automatischen Ausgabe.- Der Default recipient der Verbindung.
- Bei einem Run, den eine Inbound-Verbindung für Twilio Messaging gestartet hat, der Kunde, der die Nachricht gesendet hat. Beide Verbindungen müssen denselben Kontozugang, Kanal und Absender verwenden.
Ein Standardempfänger hat Vorrang vor Antworten; lass ihn leer, um jedem Kunden zu antworten. Findet connic keinen Empfänger, schlägt der Versand fehl.
Medien
Übergib in media_urls öffentliche HTTP- oder HTTPS-URLs ohne eingebettete Zugangsdaten; Twilio ruft die Dateien ab. Eine Nachricht nimmt bis zu 10 URLs für MMS und eine für WhatsApp oder RCS an. In IE1 geht nur Text. Ausgehende Medien verwenden URLs, nicht das Base64-Format unter files aus eingehenden Nachrichten.
Es gelten die Dateitypen und Größengrenzen des jeweiligen Kanals. WhatsApp ignoriert Text, der zusammen mit Audio, Video, Dokumenten oder anderen Medien außer Bildern gesendet wird; sende diesen Text als eigene Nachricht. Siehe Twilios Referenz zum WhatsApp-Versand.
WhatsApp-Vorlagen
Außerhalb des 24-Stunden-Servicefensters von WhatsApp sendest du eine genehmigte Vorlage. Erstelle die Vorlage in Twilio und lass sie dort genehmigen; hinterlege dann ihre Content SID und Variablen an der Verbindung oder übergib sie in der Payload. Siehe Twilios Anleitung für Nachrichtenvorlagen.
{
"to": "whatsapp:+14155550124",
"content_sid": "HX00000000000000000000000000000000",
"content_variables": {"1": "12345", "2": "Freitag"}
}Werte aus der Payload überschreiben content_sid und content_variables der Verbindung. Variablenwerte müssen Strings sein. Eine Payload mit content_sid darf nicht zugleich Text oder media_urls enthalten. Solange die Verbindung eine Standard-Content-SID hat, nutzt jede Nachricht die Vorlage: Reiner Text des Agenten wird ignoriert, Medien-URLs werden abgelehnt. Gib content_variables zurück, um die Vorlage zu füllen.
Zustellung und Wiederholungen
Ein erfolgreicher Run der Verbindung bedeutet, dass Twilio die Anfrage angenommen hat, nicht, dass die Nachricht zugestellt wurde. Die Ausgabe des Runs enthält die Message SID und die Statusfelder, die Twilio zurückgegeben hat; Zustellstatus und Kanalfehler zeigen die Messaging Logs von Twilio.
connic wiederholt Verbindungsfehler vor der Übermittlung und 429-Antworten, wartet dabei so lange, wie Retry-After von Twilio verlangt, und versucht es insgesamt 3-mal. Andere Fehler werden nicht wiederholt. Ist das Ergebnis unklar, etwa nach einem Lese- oder Schreibfehler oder einer 5xx-Antwort, prüfe die Logs von Twilio, bevor du erneut sendest; Twilio hat die Nachricht womöglich schon angenommen.
Limits und Fehler
| Limit | Wert |
|---|---|
| Nachrichtentext | 1.600 Zeichen |
| Ausgehende Medien | 10 URLs für SMS/MMS, eine für WhatsApp und RCS, keine in IE1 |
| Eingehende Anhänge | 50 Dateien, höchstens 32 MiB insgesamt; nur US1 |
| Eingehende Anfrage | 256 KiB Formulardaten |
| Eingehende Nachrichten | 1.000 pro Minute und Verbindung |
| Zustellversuche | 3 insgesamt bei Fehlern, die wiederholt werden können |
| Aktive Verbindungen | Ist das Limit aktiver Verbindungen des Tarifs erreicht, schlägt das Anlegen in beiden Modi mit 403 fehl, statt die Verbindung pausiert anzulegen. Ein Deployment, das sie am Limit anlegen oder zurückholen würde, schlägt fehl. |
Bei Inbound prüft connic die X-Twilio-Signature jeder Anfrage anhand der erzeugten Webhook-URL und des Auth Tokens, danach Konto, Kanal und Empfänger, und antwortet Twilio mit einem dieser Status:
| Status | Bedeutung |
|---|---|
| 200 | Angenommen. Die Antwort ist ein leeres TwiML-Dokument. Pausierte Verbindungen und Verbindungen ohne verknüpfte Agenten antworten ebenfalls mit 200 und starten keinen Run. |
| 400 | Die Nachricht ist ungültig, oder die Anfrage ist ein Callback zum Zustellstatus. Diese URL nimmt nur eingehende Nachrichten an. |
| 403 | Die Signatur ist ungültig, oder Konto, Kanal oder Empfänger passen nicht zur Verbindung. Prüfe Auth Token und Region des Kontozugangs, ob die URL in Twilio exakt der erzeugten Webhook-URL entspricht und ob Kanal und Absender der Verbindung zur To-Adresse der Nachricht passen. |
| 404 | Unter dieser URL gibt es keine Inbound-Verbindung für Twilio Messaging. |
| 413 | Die Anfrage ist größer als 256 KiB. |
| 415 | Die Anfrage enthält keine Formulardaten. |
| 429 | Die Verbindung hat in einer Minute mehr als 1.000 Nachrichten erhalten. |
| 503 | connic konnte die Nachricht in diesem Moment nicht einreihen. |
| Problem | Lösung |
|---|---|
| Das Anlegen der Verbindung schlägt fehl | Behebe den gemeldeten Twilio-Fehler. Ist der Absender mit einer anderen connic-Verbindung verbunden, lösche zuerst diese Verbindung. Gehört der Absender zu einem Messaging Service, wähle dort Defer to sender's webhook und versuche es erneut. |
| Die Sandbox sendet die Demo-Antwort von Twilio | Trage die Webhook-URL in den Sandbox-Einstellungen ein; siehe WhatsApp Sandbox. Das Fortsetzen der Verbindung in connic ersetzt diesen Schritt nicht. |
| Es startet kein Run | Prüfe, ob die Verbindung aktiv und mit einem deployten Agenten verknüpft ist, ob Twilio per HTTP POST an die exakte Webhook-URL sendet und wie die Einstellungen für eingehende Nachrichten am Absender in Twilio aussehen. |
| Anhänge fehlen | Lies file_issues im Run-Input und die Warnung zu Anhängen in den Logs der Verbindung. Jeder Eintrag nennt die ausgelassene Datei und den Grund. |
| Versand scheitert ohne Empfänger | Setze to, hinterlege einen Standardempfänger oder sorge dafür, dass Inbound- und Outbound-Verbindung denselben Kontozugang, Kanal und Absender verwenden. |
| Twilio lehnt die Nachricht ab | Prüfe den Twilio-Fehlercode, die Registrierung des Absenders, das Adressformat, die Region sowie Genehmigung und Variablen der Vorlage. |
| Keine automatische Antwort | Prüfe die Outbound-Verknüpfung des Agenten und ihre ausgewählten Eingänge, danach das Ergebnis des Agenten und den Run der Outbound-Verbindung. |