Dieser Artikel ist eine Fortsetzung des folgenden Artikels. Es gibt einige Begriffe, die in der Artikelserie eindeutig definiert sind. Es wird daher empfohlen, sie zuerst zu lesen. Verständnis aus dem Mechanismus Twilio # 1 - Einführung
Dieser Abschnitt beschreibt den Kommunikationsfluss bei Verwendung von Twilio und die zu sendende und zu empfangende Datenstruktur.
―― 1. Einführung ―― 1. Definition der Grundstruktur und der Begriffe bei Verwendung von Twilio ―― 2. Die Umgebung wurde diesmal überprüft ―― 2. ** Kommunikationsflussdatenstruktur ← Jetzt hier **
Der diesmal zu realisierende Twilio-Client zielte darauf ab, dasselbe wie ein normales Telefon tun zu können. Die spezifischen Spezifikationen sind wie folgt.
--Was du tun kannst
Es wird angenommen, dass die Parameter wie die Telefonnummer wie folgt sind.
Parameter | Wert | Erläuterung / Bemerkungen |
---|---|---|
Twilio Telefonnummer | 050-3123-4567 | Die dem Twilio-Client zugewiesene Telefonnummer. Bitte kaufen Sie im Voraus über die Twilio-Konsole. |
Client Name | DeviceId_0001 | Der Name, mit dem der Twilio-Client auf dem Twilio-Server identifiziert und gesteuert wird. |
Externes Telefon | 090-5987-6543 | Telefon außerhalb von Twilio. Bitte benutzen Sie Ihr eigenes Handy. |
Schauen Sie sich zunächst die folgende Abbildung an.
Der Verarbeitungsablauf ist wie folgt.
--1-1. Anforderung, ein Fähigkeitstoken zu erhalten
Die Implementierung der Kommunikationsmethode zwischen 1-1 und 1-2 liegt ganz beim Benutzer. Es ist auch möglich, HTTP / HTTPS und andere Protokolle für die Kommunikation zu verwenden.
Die Datenstruktur ist ebenfalls völlig willkürlich. Die vom Twilio-Client gesendeten Informationen können einen Benutzernamen, ein Kennwort und andere Informationen zur Identifizierung des Twilio-Clients enthalten. Es ist auch möglich, eine beliebige Authentifizierung / Autorisierung zu realisieren. Capability Token ist als von API Server zurückgegebene Informationen erforderlich, es können jedoch auch alle anderen Informationen zurückgegeben werden.
Bei dieser Überprüfung wurden sowohl Anforderung als auch Antwort in JSON implementiert. Die spezifische Datenstruktur ist wie folgt.
Die Anfrage war einfach eine Twilio-Telefonnummer. Wenn die angegebene Twilio-Telefonnummer bereits erhalten wurde, ist die Authentifizierung erfolgreich.
"+81-50-1234-9876"}
Die Antwort war das Capability Token und der Erfolg oder Misserfolg des Prozesses.
#### **`{"capabilityToken": capabilityToken, "success": True}`**
Kommunikation 1-3 wurde nicht verifiziert. Details sind unbekannt. Im Fall eines JavaScript-Clients wird anscheinend WebSocket verwendet, um Informationen wie das Capability Token an Twilio Server zu senden. Die Ersteinrichtung erfolgt über verschiedene von Twilio bereitgestellte SDKs, sodass Benutzer sich dessen normalerweise nicht bewusst sein müssen. \ # Ich denke jedoch, dass es Fälle geben kann, in denen diese Informationen bei der Fehlerbehebung benötigt werden.
API Server verwendet die Twilio Helper-Bibliothek, um Capability-Token zu generieren.
Die Erklärung basiert auf der Implementierung in Python 2.7. Es wird davon ausgegangen, dass die erforderlichen Bibliotheken bereits installiert und verfügbar sind. https://www.twilio.com/docs/libraries/python#help Außerdem wird davon ausgegangen, dass das Twilio-Konto eröffnet und die Konto-SID und das Authentifizierungstoken bestätigt wurden und dass die TwiML-App erstellt und die App-SID bestätigt wurde.
from twilio.util import TwilioCapability
import json
def generate_capability_token(twilio_phone_number):
#Stellen Sie die erforderlichen Parameter ein.
twilio_account_sid = "{{twilio_accound_sid}}" #Geben Sie die SID Ihres Twilio-Kontos an.
twilio_auth_token = "{{twilio_account_auth_token}}" #Geben Sie das Auth-Token an, das Ihrem Twilio-Konto zugeordnet ist.
twilio_app_sid = "{{twilio_app_sid}}" #Geben Sie die zuvor erstellte App Sid an.
expiration_time_for_capability_token = 3600 #Gibt das Ablaufdatum des Capability-Tokens an.
#Generieren Sie ein Capability Token und erteilen Sie die erforderlichen Berechtigungen.
capability = TwilioCapability(twilio_account_sid, twilio_auth_token)
capability.allow_client_incoming(get_client_name_by_phone_number(twilio_phone_number)) #Ruft den Twilio-Client-Namen basierend auf der angegebenen Twilio-Telefonnummer ab. erhalten_client_name_by_phone_number ist eine Funktion, die Sie individuell implementiert haben.
capability.allow_client_outgoing(twilio_app_sid)
capabilityToken = capability.generate(expiration_time_for_capability_token)
#In die Standardstruktur konvertieren und zurückgeben.
res = {"capabilityToken": capabilityToken, "success": True}
return json.dumps(res)
Grundsätzlich wird es gemäß folgendem Dokument implementiert. Generate Capability Tokens http://twilio-python.readthedocs.io/en/latest/usage/token-generation.html
Gewähren Sie nach dem Generieren der Twilio-Fähigkeit basierend auf der SID und dem Authentifizierungstoken des Twilio-Kontos Berechtigungen mit den Methoden allow_client_incoming und allow_client_outgoing. Schließlich können Sie ein Capability-Token generieren, indem Sie die Twilio Capability-Generierungsmethode ausführen. Sie können das Ablaufdatum in Sekunden als Argument angeben.
Details zum Capability Token finden Sie in den folgenden Dokumenten.
Twilio Client: Capability Tokens https://www.twilio.com/docs/api/client/capability-tokens
Capbility Token ist im JWT-Format (Json Web Token). Für die Generierung ist keine Kommunikation mit Twilio Server erforderlich. Obwohl es nicht verifiziert wurde, wird angenommen, dass die erforderlichen Informationen in JSON konvertiert werden, eine elektronische Signatur mit Auth Token generiert und angegeben wird und anschließend die Base64-Decodierung durchgeführt wird.
Die wichtigen Punkte hier sind wie folgt.
Schauen wir uns als nächstes an, wie Twilio Client andere Telefone anruft.
Schauen Sie sich zunächst die folgende Abbildung an.
Denken Sie auch an die URL, die Sie eingerichtet haben, als Sie Ihr Twilio-Konto eingerichtet und Ihre Telefonnummer erhalten haben. Die unter "A CALL COMES IN" angegebene URL wird beim Empfang eines Anrufs verwendet.
Der Verarbeitungsablauf ist wie folgt. ** Um TwiML zu erhalten, wird die in der Twilio-Telefonnummer des Empfängers festgelegte URL verwendet. ** **.
--2-1. Rufen Sie Twilio Client von einem tatsächlichen Telefon aus an
Das von API Server in Nr. 2-3 zurückgegebene TwiML lautet wie folgt. Diese TwiML bedeutet, den angegebenen Twilio-Client aufzurufen.
<?xml version="1.0\" encoding="UTF-8"?>
<Response>
<Dial timeout="60">
<Client>DeviceId_0001</Client>
</Dial>
</Response>
Die Twilio-Telefonnummer selbst kann nicht im Element \
Daher muss API Server den Client-Namen basierend auf den Twilio-Telefonnummerninformationen des Empfängers in Nr. 2-3 ermitteln. Es ist besser, die Zuordnungsinformationen im Voraus in der Datenbank usw. zu speichern und bei der Generierung von TwiML abzurufen.
Darüber hinaus kann TwiML verschiedene Steuerelemente ausführen. Einzelheiten entnehmen Sie bitte dem offiziellen Dokument.
https://www.twilio.com/docs/api/twiml/dial https://www.twilio.com/docs/api/twiml/client
Anfragen von Twilio Server an API Server sind etwas Besonderes. Außerdem konnte ich in der offiziellen Dokumentation keine detaillierten Informationen finden. Das Folgende ist eine Erklärung basierend auf den vom Paket erfassten Informationen.
Die obige Abbildung zeigt eine Paketerfassung einer HTTP-POST-Anforderung von Twilio Server. Die Punkte sind wie folgt.
--Content-Type: muss application / x-www-form-urlencoded sein
Schauen wir uns die Details der einzelnen Parameter an. Die Telefonnummer des Absenders lautet "090-5987-6543" und die Twilio-Telefonnummer des Empfängers lautet "050-3123-4567".
Parameter | Beschreibung (basierend auf Vermutungen) |
---|---|
AccountSid=AC3xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | Die SID Ihres Twilio-Kontos. |
ApiVersion=2010-04-01 | Ist es die API-Version von Twilio? |
Called=%2B815031234567 | Twilio-Telefonnummer des Empfängers. E..164 Format. Es scheint, dass der gleiche Wert wie To eingegeben wird. |
CalledCity= | |
CalledCountry=JP | |
CalledState= | |
CalledVia=05031234567 | Unbekannt. Wird es verwendet, wenn der Anruf innerhalb von Twilio weitergeleitet wird? |
CalledZip= | |
Caller=%2B819059876543 | Die Telefonnummer des anrufenden Telefons. Es scheint, dass der gleiche Wert wie Von eingegeben wird. |
CallerCity= | |
CallerCountry=JP | |
CallerState= | |
CallerZip= | |
CallSid=CA86nnnnnnnnnnnnnnnnnnnnnnnnnnnnnn | Ist es eine eindeutige ID für den Anruf? |
CallStatus=ringing | |
Direction=inbound | Ist es die Richtung des Anrufs? |
ForwardedFrom=05031234567 | Unbekannt. Wird es verwendet, wenn der Anruf innerhalb von Twilio weitergeleitet wird? |
From=%2B819059876543 | Die Telefonnummer des anrufenden Telefons. E..164 Format. Es scheint, dass der gleiche Wert wie Anrufer eingegeben wird. |
FromCity= | |
FromCountry=JP | |
FromState= | |
FromZip= | |
To=%2B815031234567 | Twilio-Telefonnummer des Empfängers. Es scheint, dass der gleiche Wert wie "Angerufen" eingegeben wird. |
ToCity= | |
ToCountry=JP | |
ToState= | |
ToZip= |
Hier gibt es vier wichtige Parameter: Anrufer / Von / Angerufen / An. Generieren Sie in API Server TwiML basierend auf diesen Informationen.
Die Schnellstart-App von Python scheint Caller als Quellinformationen und To als Empfängerinformationen zu verwenden. Daher sollte bei der Implementierung der TwiML-Rückgabe-API für eingehende Anrufe auch dieser Parameter verwendet werden.
https://github.com/TwilioDevEd/client-quickstart-python
Schauen Sie sich zunächst die folgende Abbildung an.
Denken Sie auch an die URL, die Sie beim Einrichten Ihres Twilio-Kontos und beim Erstellen der TwiML-App eingerichtet haben.
Der Verarbeitungsablauf ist wie folgt. ** Um TwiML zu erhalten, wird die in der TwiML-App festgelegte URL verwendet. ** **.
--3-1. Stellen Sie eine ausgehende Anfrage vom Twilio Client
Das von API Server in Nr. 3-3 zurückgegebene TwiML lautet wie folgt. Die anrufende Twilio-Telefonnummer lautet "050-3123-4567" und die anrufende Telefonnummer lautet "090-5987-6543".
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Dial timeout="60" callerId="+81-50-3123-4567">
<Number>+81-90-5987-6543</Number>
</Dial>
</Response>
Geben Sie im Element \
In der offiziellen Dokumentation wurden keine detaillierten Informationen gefunden. Das Folgende ist eine Erklärung basierend auf den vom Paket erfassten Informationen.
Schauen wir uns die Details der einzelnen Parameter an. Die folgenden Parameter werden hinzugefügt, wenn die Verbindung vom Twilio Client ausgeführt wird.
--callerPhoneNumber: Die mit Ihnen verknüpfte Telefonnummer des Anrufers. --callOutgoingPhoneNumber: Die tatsächlich anzurufende Telefonnummer.
Parameter | Beschreibung (basierend auf Vermutungen) |
---|---|
AccountSid=AC3exxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | Die SID Ihres Twilio-Kontos. |
ApiVersion=2010-04-01 | Ist es die API-Version von Twilio? |
ApplicationSid=AP75zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz | Mit CapabilityToken verknüpfte TwiML-App-SID |
Called= | |
Caller=client%3ADeviceId_0001 | Client Name des Quell-Twilio-Clients. |
CallSid=CA06nnnnnnnnnnnnnnnnnnnnnnnnnnnnnn | Ist es eine eindeutige ID für den Anruf? |
CallStatus=ringing | |
Direction=inbound | |
From=client%3ADeviceId_0001 | Client Name des Quell-Twilio-Clients. Es scheint, dass der gleiche Wert wie Anrufer eingegeben wird. |
To= | |
callerPhoneNumber=%2B81-50-3123-4567 | Benutzerdefinierte Parameter, die im Twilio-Client angegeben sind |
callOutgoingPhoneNumber=%2B81-90-5987-6543 | Benutzerdefinierte Parameter, die im Twilio-Client angegeben sind |
Standardmäßig sind Anrufer und Von auf Clientname eingestellt. Bei Bedarf können Sie die erforderlichen Parameter in der Twilio Client-Implementierung angeben. Wie oben erwähnt, kann der API-Server einen beliebigen Wert in der Kommunikation zurückgeben, wenn der Twilio-Client das Fähigkeitstoken erwirbt, sodass Sie hier auch die erforderlichen Parameter zum Zeitpunkt der Verbindung übergeben können.
Das ist alles für den Kommunikationsfluss und die Datenstruktur. Von nun an werden wir endlich mit der Implementierung beginnen. Walkthrough zur Implementierung von AWS API Gateway + Lambda (Teil 1)