Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo descrive come eseguire la migrazione di un'implementazione di Twilio Conversations esistente all'SDK di chat di Servizi di comunicazione di Azure. Sia Twilio Conversations s che Servizi di comunicazione di Azure Chat SDK sono piattaforme basate sul cloud che consentono agli sviluppatori di aggiungere funzionalità di chat alle applicazioni Web.
Esistono tuttavia alcune differenze principali tra di esse che potrebbero influire sulla scelta della piattaforma o richiedere alcune modifiche al codice esistente se si decide di eseguire la migrazione. In Twilio la chat viene incorporata in una conversazione che è un'istanza multicanale. Servizi di comunicazione di Azure Chat SDK è un singolo canale per la chat. In questo articolo vengono confrontate le funzionalità e le funzioni principali di entrambe le piattaforme e vengono fornite alcune indicazioni su come eseguire la migrazione di un'implementazione di chat di Twilio Conversations esistente a Servizi di comunicazione di Azure Chat SDK.
Questo articolo non illustra la creazione di un livello di servizio per gestire i token per l'applicazione di chat. Per altre informazioni sull'architettura della chat, vedere Concetti relativi alle chat. Per altre informazioni sui token di accesso, vedere Token di accesso utente.
Considerazioni essenziali
Autenticazione e sicurezza
Servizi di comunicazione di Azure si integra profondamente con Microsoft Entra ID per la gestione delle identità. Twilio usa il proprio sistema di identità. Potrebbe essere necessario rielaborare la modalità di gestione dell'autenticazione utente.
Gestione di eventi
L'approccio basato sul webhook di Twilio potrebbe richiedere un'architettura diversa rispetto al modello basato su eventi di ACS.
Altri servizi
Se l'applicazione si basa su altri servizi Twilio (ad esempio SMS, Voice e così via), è necessario trovare servizi di Azure equivalenti o gestire soluzioni ibride.
La migrazione potrebbe comportare non solo la sostituzione delle chiamate API, ma anche il ripensamento del modo in cui l'applicazione interagisce con questi servizi di comunicazione all'interno del contesto più ampio dell'architettura dell'applicazione.
Funzionalità principali disponibili in Servizi di comunicazione di Azure Chat SDK
Funzionalità | JavaScript SDK | iOS SDK | Android SDK | .NET SDK | SDK per Java | Python SDK |
---|---|---|---|---|---|---|
Installa | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Importa | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Auth | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Messaggistica in tempo reale | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Aggiornare il messaggio inviato | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Raggruppare le conversazioni | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Conversazioni dirette (uno-a-uno) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Aggiornare l'argomento di un thread di chat | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Aggiungere o rimuovere un partecipante | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Elenco di partecipanti in un thread di chat | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Eliminare il thread di chat | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Condividi cronologia chat | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Supporto multimediale (immagini, file e così via) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Ricevute per il recapito dei messaggi | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Indicatori di digitazione | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Ricevute di lettura | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Notifiche push | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Supporto di più dispositivi | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Ricerca messaggi | - | - | - | - | - | - |
Modifica dei messaggi | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Eliminazione di messaggi | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Usare ruoli e autorizzazioni | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Moderazione conversazione | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Gestione dei partecipanti | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Integrazione con altri servizi di Azure | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Crittografia lato client | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Archiviazione messaggi sul lato server | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Integrazione di bot | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Metadati dei messaggi personalizzati | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Stato della presenza dell'utente | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Supporto localizzato e multilingue | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Gruppo di funzionalità | Funzionalità | Interfaccia della riga di comando di Azure | JavaScript | Java | .NET | Python | iOS | Android |
---|---|---|---|---|---|---|---|---|
Funzionalità principali | Creare un thread di chat tra 2 o più utenti | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Aggiornare l'argomento di un thread di chat | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
Aggiungere o rimuovere partecipanti da un thread di chat | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
Scegliere se condividere la cronologia dei messaggi di chat con il partecipante aggiunto | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
Ottenere un elenco di partecipanti in un thread di chat | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
Eliminare un thread di chat | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
Dato che un utente di comunicazione, ottenere l'elenco dei thread di chat di cui l'utente fa parte | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
Ottenere informazioni per un thread di chat specifico | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
Inviare e ricevere messaggi in un thread di chat | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
Aggiornare il contenuto del messaggio inviato | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
Eliminare un messaggio inviato in precedenza | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
Leggere le ricevute per i messaggi letti da altri partecipanti in una chat | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
Ricevere una notifica quando i partecipanti digitano attivamente un messaggio in un thread di chat | ❌ | ✔️ | ❌ | ❌ | ❌ | ✔️ | ✔️ | |
Ottenere tutti i messaggi in un thread di chat | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
Inviare emoji Unicode come parte del contenuto del messaggio | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
Aggiungere metadati ai messaggi di chat | ❌ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
Aggiungere il nome visualizzato alla notifica dell'indicatore di digitazione | ❌ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
Notifiche in tempo reale (abilitate dal pacchetto di segnalazione proprietario**) | I client di chat possono sottoscrivere per ottenere aggiornamenti in tempo reale per i messaggi in arrivo e altre operazioni che si verificano in un thread di chat. Per visualizzare un elenco degli aggiornamenti supportati per le notifiche in tempo reale, vedere Concetti relativi alle chat | ❌ | ✔️ | ❌ | ❌ | ❌ | ✔️ | ✔️ |
Notifiche push per dispositivi mobili con Hub di notifica | Chat SDK fornisce API che consentono ai client di ricevere notifiche per i messaggi in arrivo e altre operazioni che si verificano in un thread di chat connettendo un hub di notifica di Azure alla risorsa di Servizi di comunicazione. In situazioni in cui l'app per dispositivi mobili non è in esecuzione in primo piano, i modelli sono disponibili per generare notifiche popup ("avvisi popup") per informare gli utenti finali, vedere Concetti relativi alle chat. | ❌ | ❌ | ❌ | ❌ | ❌ | ✔️ | ✔️ |
Creazione di report (queste informazioni sono disponibili nella scheda Monitoraggio per la risorsa servizi di comunicazione in portale di Azure) |
Comprendere il traffico api dall'app di chat monitorando le metriche pubblicate in Esplora metriche di Azure e impostando avvisi per rilevare le anomalie | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Monitorare ed eseguire il debug della soluzione Servizi di comunicazione abilitando la registrazione diagnostica per la risorsa | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
Prerequisiti
- Account Azure: assicurarsi che l'account Azure sia attivo. I nuovi utenti possono creare un account gratuito in Microsoft Azure.
- Node.js 18: assicurarsi che Node.js 18 sia installato nel sistema. Scaricare da Node.js.
- Risorsa servizi di comunicazione: configurare una risorsa di Servizi di comunicazione tramite il portale di Azure e prendere nota del stringa di connessione.
- Interfaccia della riga di comando di Azure: seguire le istruzioni per installare l'interfaccia della riga di comando di Azure in Windows.
- Token di accesso utente: generare un token di accesso utente per creare un'istanza del client di chat. È possibile crearne uno usando l'interfaccia della riga di comando di Azure come indicato di seguito:
az communication identity token issue --scope voip --connection-string "yourConnectionString"
Per altre informazioni, vedere Usare l'interfaccia della riga di comando di Azure per creare e gestire i token di accesso.
Installazione
Installare Servizi di comunicazione di Azure Chat SDK
Usare il npm install
comando per installare Servizi di comunicazione di Azure SDK per JavaScript.
npm install @azure/communication-chat --save
L'opzione --save
aggiunge la libreria come dipendenza nel file package.json .
Rimuovere Twilio SDK dal progetto
È possibile rimuovere Twilio SDK dal progetto disinstallando il pacchetto.
npm uninstall twilio-conversations
Modello a oggetti
Le classi e le interfacce seguenti gestiscono alcune delle principali funzionalità di Servizi di comunicazione di Azure Chat SDK per JavaScript.
Nome | Descrizione |
---|---|
ChatClient |
Questa classe è necessaria per la funzione Chat. Crea un'istanza con le informazioni sulla sottoscrizione e usala per creare, ottenere, eliminare thread e sottoscrivere eventi di chat. |
ChatThreadClient |
Questa classe è necessaria per la funzione Thread di chat. Ottenere un'istanza ChatClient tramite e usarla per inviare/ricevere/aggiornare/eliminare messaggi, aggiungere/rimuovere/ottenere utenti, inviare notifiche di digitazione e leggere le ricevute. |
Inizializzare il client chat
Twilio
/* Initialization */
import { Client } from '@twilio/conversations';
const token = await fetch(token_url);
const client = new Client(token);
client.on('stateChanged', (state) => {
if (state === 'failed') {
// The client failed to initialize
return;
}
if (state === 'initialized') {
// Use the client
}
});
Servizi di comunicazione di Azure
Analogamente a Twilio, il primo passaggio consiste nel ottenere un token di accesso e l'endpoint del servizio di comunicazione generato come parte dei passaggi dei prerequisiti. Sostituire i segnaposto nel codice.
import { ChatClient } from '@azure/communication-chat';
import { AzureCommunicationTokenCredential } from '@azure/communication-common';
// Your unique Azure Communication service endpoint
let endpointUrl = '<replace with your resource endpoint>';
// The user access token generated as part of the pre-requisites
let userAccessToken = '<USER_ACCESS_TOKEN>';
let chatClient = new ChatClient(endpointUrl, new AzureCommunicationTokenCredential(userAccessToken));
console.log('Azure Communication Chat client created!');
Avviare un thread di chat
Twilio
Avviare un thread di chat in Conversazioni twilio. Usare FriendlyName
per assegnare un nome leggibile a questa conversazione.
let conversation = await client.createConversation({
friendlyName: "Testing Chat"
});
await conversation.join();
Servizi di comunicazione di Azure
Usare il metodo createThread
per creare un thread di chat.
Usare createThreadRequest
per descrivere la richiesta di thread:
- Usare
topic
per dare un argomento a questa chat. aggiornaretopic
dopo aver creato il thread di chat usando laUpdateThread
funzione . - Usare
participants
per elencare i partecipanti da aggiungere al thread di chat.
Quando viene risolto, createChatThread
il metodo restituisce un oggetto CreateChatThreadResult
. Questo modello contiene una chatThread
proprietà in cui è possibile accedere al id
del thread appena creato. Usare quindi per ottenere un'istanza id
di .ChatThreadClient
Usare quindi per ChatThreadClient
eseguire l'operazione all'interno del thread, ad esempio l'invio di messaggi o l'elenco dei partecipanti.
async function createChatThread() {
const createChatThreadRequest = {
topic: "Hello, World!"
};
const createChatThreadOptions = {
participants: [
{
id: { communicationUserId: '<USER_ID>' },
displayName: '<USER_DISPLAY_NAME>'
}
]
};
const createChatThreadResult = await chatClient.createChatThread(
createChatThreadRequest,
createChatThreadOptions
);
const threadId = createChatThreadResult.chatThread.id;
return threadId;
}
Ottenere un client di thread di chat
Twilio
Ottenere un thread di chat (conversazione) in Twilio.
if (selectedConversation) {
conversationContent = (
<Conversation
conversationProxy={selectedConversation}
myIdentity={this.state.name}
/>
);
} else if (status !== "success") {
conversationContent = "Loading your conversation!";
} else {
conversationContent = "";
}
Servizi di comunicazione di Azure
Il metodo getChatThreadClient
restituisce un chatThreadClient
per un thread già esistente. Usarlo per eseguire operazioni sul thread creato: aggiungere partecipanti, inviare messaggi e così via.
threadId
è l'ID univoco del thread di chat esistente.
let chatThreadClient = chatClient.getChatThreadClient(threadId);
console.log(`Chat Thread client for threadId:${threadId}`);
Aggiungere questo codice al posto del <CREATE CHAT THREAD CLIENT>
commento in client.js, aggiornare la scheda del browser e controllare la console. Dovrebbe essere visualizzato quanto segue:
Chat Thread client for threadId: <threadId>
Aggiungere un utente come partecipante al thread di chat
Dopo aver creato un thread di chat, è possibile aggiungere e rimuovere utenti da esso. Aggiungendo utenti, è possibile concedere loro l'accesso per inviare messaggi al thread di chat e aggiungere/rimuovere altri partecipanti.
Twilio
Aggiungere un partecipante a un thread di chat.
// add chat participant to the conversation by its identity
await conversation.add('identity');
// adds yourself as a conversations sdk user to this conversation
// use after creating the conversation from the SDK
await conversation.join();
conversation.on('participantJoined', (participant) => {
// fired when a participant has joined the conversation
});
Servizi di comunicazione di Azure
Prima di chiamare il addParticipants
metodo, assicurarsi di acquisire un nuovo token di accesso e un'identità per tale utente. L'utente deve avere tale token di accesso per inizializzare il client di chat.
addParticipantsRequest
descrive l'oggetto richiesta in cui sono participants
elencati i partecipanti da aggiungere al thread di chat:
-
id
, obbligatorio, è l'identificatore di comunicazione da aggiungere al thread di chat. -
displayName
, facoltativo, è il nome visualizzato per il partecipante del thread. -
shareHistoryTime
, facoltativo, è l'ora da cui la cronologia delle chat viene condivisa con il partecipante. Per condividere la cronologia dall'inizio del thread di chat, impostare questa proprietà su qualsiasi data uguale o precedente all'ora di creazione del thread. Per condividere nessuna cronologia precedente all'aggiunta del partecipante, impostarla sulla data corrente. Per condividere una cronologia parziale, impostarla su una data a scelta.
const addParticipantsRequest =
{
participants: [
{
id: { communicationUserId: '<NEW_PARTICIPANT_USER_ID>' },
displayName: 'Jane'
}
]
};
await chatThreadClient.addParticipants(addParticipantsRequest);
Sostituire NEW_PARTICIPANT_USER_ID con un nuovo ID utente
Inviare un messaggio a un thread di chat
A differenza di Twilio, Servizi di comunicazione di Azure non dispone di funzioni separate per l'invio di messaggi di testo o supporti.
Twilio
Per inviare un sms in Twilio.
// Send Text Message
await conversation
.prepareMessage()
.setBody('Hello!')
.setAttributes({foo: 'bar'})
.build()
.send();
Per inviare file multimediali in Twilio.
const file =
await fetch("https://v.fastcdn.co/u/ed1a9b17/52533501-0-logo.svg");
const fileBlob = await file.blob();
// Send a media message
const sendMediaOptions = {
contentType: file.headers.get("Content-Type"),
filename: "twilio-logo.svg",
media: fileBlob
};
await conversation
.prepareMessage()
.setBody('Here is some media!')
.addMedia(sendMediaOptions);
Servizi di comunicazione di Azure
Usare il metodo sendMessage
per inviare un messaggio a un thread identificato da threadId.
sendMessageRequest
viene usato per descrivere la richiesta di messaggio:
- Usare
content
per fornire il contenuto del messaggio di chat.
Usare sendMessageOptions
per descrivere i parametri facoltativi dell'operazione:
- Usare
senderDisplayName
per specificare il nome visualizzato del mittente. - Usare
type
per specificare il tipo di messaggio, ad esempiotext
ohtml
.
Per ricreare la proprietà "Media" in Twilio.
- Usare
metadata
facoltativamente per includere tutti gli altri dati da inviare insieme al messaggio. Questo campo consente agli sviluppatori di estendere la funzione messaggio di chat e aggiungere informazioni personalizzate per il caso d'uso. Ad esempio, quando si condivide un collegamento al file nel messaggio, è possibile aggiungerehasAttachment: true
metadati in modo che l'applicazione del destinatario possa analizzare e visualizzare di conseguenza. Per altre informazioni, vedere Condivisione file.
SendChatMessageResult
è la risposta restituita dall'invio di un messaggio. Contiene un ID, ovvero l'ID univoco del messaggio.
const sendMessageRequest =
{
content: 'Please take a look at the attachment'
};
let sendMessageOptions =
{
senderDisplayName : 'Jack',
type: 'text',
metadata: {
'hasAttachment': 'true',
'attachmentUrl': 'https://contoso.com/files/attachment.docx'
}
};
const sendChatMessageResult = await chatThreadClient.sendMessage(sendMessageRequest, sendMessageOptions);
const messageId = sendChatMessageResult.id;
console.log(`Message sent!, message id:${messageId}`);
Ricevere messaggi di chat da un thread di chat
A differenza di Twilio, Servizi di comunicazione di Azure non dispone di funzioni separate per ricevere messaggi di testo o supporti. Servizi di comunicazione di Azure usa Griglia di eventi di Azure per gestire gli eventi. Per altre informazioni, vedere Gestione degli eventi.
Twilio
Per ricevere un sms in Twilio.
// Receive text message
let paginator =
await conversation.getMessages(
30,0,"backwards"
);
const messages = paginator.items;
Per ricevere supporti in Twilio.
// Receive media
// Return all media attachments (possibly empty array), without temporary urls
const media = message.attachedMedia;
// Get a temporary URL for the first media returned by the previous method
const mediaUrl = await media[0].getContentTemporaryUrl();
Servizi di comunicazione di Azure
Con la segnalazione in tempo reale, è possibile sottoscrivere l'ascolto dei nuovi messaggi in arrivo e aggiornare i messaggi correnti in memoria di conseguenza. Servizi di comunicazione Azure supporta un elenco di eventi che è possibile sottoscrivere.
// open notifications channel
await chatClient.startRealtimeNotifications();
// subscribe to new notification
chatClient.on("chatMessageReceived", (e) => {
console.log("Notification chatMessageReceived!");
// your code here
});
In alternativa, è possibile recuperare i messaggi di chat eseguendo il polling del metodo listMessages
a intervalli specificati.
const messages = chatThreadClient.listMessages();
for await (const message of messages) {
// your code here
}
listMessages
restituisce tipi diversi di messaggi che è possibile identificare da chatMessage.type
.
Per altre informazioni, vedere Tipi di messaggi.
Sottoscrivere lo stato di connessione delle notifiche in tempo reale
Analogamente a Twilio, Servizi di comunicazione di Azure consente di sottoscrivere le notifiche degli eventi.
Sottoscrizione di eventi realTimeNotificationConnected
e realTimeNotificationDisconnected
consente di sapere quando la connessione al server di chiamata è attiva.
// subscribe to realTimeNotificationConnected event
chatClient.on('realTimeNotificationConnected', () => {
console.log("Real time notification is now connected!");
// your code here
});
// subscribe to realTimeNotificationDisconnected event
chatClient.on('realTimeNotificationDisconnected', () => {
console.log("Real time notification is now disconnected!");
// your code here
});
Prerequisiti
Creare un account Azure con una sottoscrizione attiva. Per altre informazioni, vedere Creare gratuitamente un account.
Installare Visual Studio.
Creare una risorsa di Servizi di comunicazione di Azure. Per altre informazioni, vedere Creare una risorsa Servizi di comunicazione di Azure. Registrare l'endpoint della risorsa e stringa di connessione.
Un token di accesso utente. Assicurarsi di impostare l'ambito per la chat e prendere nota della stringa del token e user_id stringa. È anche possibile usare l'interfaccia della riga di comando di Azure ed eseguire il comando seguente con il stringa di connessione per creare un utente e un token di accesso.
az communication identity token issue --scope chat --connection-string "yourConnectionString"
Per altre informazioni, vedere Usare l'interfaccia della riga di comando di Azure per creare e gestire i token di accesso.
Differenza concettuale
Sia Le conversazioni Twilio che Servizi di comunicazione di Azure Chat offrono funzioni simili, ma la loro implementazione differisce a causa degli ecosistemi circostanti e delle filosofie della piattaforma sottostanti. Le conversazioni twilio forniscono un'API di comunicazione multicanale. Servizi di comunicazione di Azure Chat è incentrata principalmente sulla chat all'interno dell'ecosistema di Azure. Questa guida alla migrazione fornisce un mapping di base tra le operazioni comuni in Twilio e i relativi equivalenti in Servizi di comunicazione di Azure Chat, consentendo di eseguire la transizione del codice .NET.
Identità
Twilio
Le conversazioni twilio usano direttamente stringhe di identità.
Servizi di comunicazione di Azure
Servizi di comunicazione di Azure richiede la creazione di utenti tramite .CommunicationIdentityClient
Configurazione
Installare il pacchetto
Per avviare la migrazione dalla chat di Twilio Conversations, il primo passaggio consiste nell'installare Servizi di comunicazione di Azure Chat SDK per .NET nel progetto.
dotnet add package Azure.Communication.Chat
Modello a oggetti
Le classi seguenti gestiscono alcune delle principali funzionalità di Servizi di comunicazione di Azure Chat SDK per C#.
Nome | Descrizione |
---|---|
ChatClient |
Questa classe è necessaria per la funzionalità di chat. È possibile crearne un'istanza con le informazioni sulla sottoscrizione e usarla per creare, ottenere ed eliminare thread. |
ChatThreadClient |
Questa classe è necessaria per la funzionalità di thread di chat. Si ottiene un'istanza tramite ChatClient e la si usa per inviare/ricevere/aggiornare/eliminare messaggi, aggiungere/rimuovere/ottenere partecipanti, inviare notifiche di digitazione e ricevute di lettura. |
Creare un client di chat
Twilio
Twilio richiede di configurare il client Twilio usando le credenziali dell'account:
var twilio = new TwilioRestClient(accountSid, authToken);
Servizi di comunicazione di Azure
Per creare un client di chat in Servizi di comunicazione di Azure, usare l'endpoint di Servizi di comunicazione e il token di accesso generato come parte dei passaggi dei prerequisiti. È necessario usare la CommunicationIdentityClient
classe di Identity SDK per creare un utente e rilasciare un token da passare al client di chat.
Vedere altre informazioni sui token di accesso utente.
// Your unique Azure Communication service endpoint
Uri endpoint = new Uri("<replace with your resource endpoint>");
CommunicationTokenCredential communicationTokenCredential = new CommunicationTokenCredential(<Access_Token>);
ChatClient chatClient = new ChatClient(endpoint, communicationTokenCredential);
Avviare un thread di chat
Conversazioni twilio
var conversation = ConversationResource.Create(
friendlyName: "My Conversation",
messagingServiceSid: "<MessagingServiceSid>"
);
Servizi di comunicazione di Azure
In Servizi di comunicazione di Azure si crea un thread equivalente a una conversazione in Twilio.
Per creare un thread di chat, usare il createChatThread
metodo in chatClient:
- Usare
topic
per dare un argomento a questa chat. È possibile aggiornare dopotopic
la creazione del thread di chat usando laUpdateTopic
funzione . - Usare la proprietà
participants
per passare un elenco di oggettiChatParticipant
da aggiungere al thread di chat. Inizializzare l'oggettoChatParticipant
con unCommunicationIdentifier
oggetto .CommunicationIdentifier
può essere di tipoCommunicationUserIdentifier
,MicrosoftTeamsUserIdentifier
oPhoneNumberIdentifier
. Ad esempio, per ottenere unCommunicationIdentifier
oggetto, è necessario passare un ID di accesso creato seguendo le istruzioni riportate in Creare un utente.
L'oggetto risposta del createChatThread
metodo contiene i chatThread
dettagli. Per interagire con le operazioni del thread di chat, ad esempio l'aggiunta di partecipanti, l'invio di un messaggio, l'eliminazione di un messaggio e così via, creare un'istanza chatThreadClient
client usando il GetChatThreadClient
metodo nel ChatClient
client.
var chatParticipant = new ChatParticipant(identifier: new CommunicationUserIdentifier(id: "<Access_ID>"))
{
DisplayName = "UserDisplayName"
};
CreateChatThreadResult createChatThreadResult = await chatClient.CreateChatThreadAsync(topic: "Hello world!", participants: new[] { chatParticipant });
ChatThreadClient chatThreadClient = chatClient.GetChatThreadClient(threadId: createChatThreadResult.ChatThread.Id);
string threadId = chatThreadClient.Id;
Ottenere un client di thread di chat
Twilio
Nelle conversazioni twilio si interagisce direttamente con una conversazione usando il SID della conversazione (identificatore univoco). Ecco come ottenere in genere una conversazione e interagire con essa:
var conversationSid = "<CONVERSATION_SID>";
var conversation = ConversationResource.Fetch(pathSid: conversationSid);
// Example: Fetching all messages in the conversation
var messages = MessageResource.Read(pathConversationSid: conversationSid);
foreach (var message in messages)
{
Console.WriteLine(message.Body);
}
Servizi di comunicazione di Azure
Il metodo GetChatThreadClient
restituisce un client di thread per un thread già esistente. È possibile usarlo per eseguire operazioni sul thread creato: aggiungere membri, inviare messaggi e così via.
threadId
è l'ID univoco del thread di chat esistente.
string threadId = "<THREAD_ID>";
ChatThreadClient chatThreadClient = chatClient.GetChatThreadClient(threadId: threadId);
Elencare tutti i thread di chat
Twilio
In Conversazioni twilio è possibile recuperare tutte le conversazioni in cui un utente è un partecipante eseguendo una query sulla UserConversations
risorsa. Questa risorsa fornisce un elenco di conversazioni per un utente specifico.
/ Initialize Twilio Client
string accountSid = "<YOUR_ACCOUNT_SID>";
string authToken = "<YOUR_AUTH_TOKEN>";
TwilioClient.Init(accountSid, authToken);
// The identity of the user you're querying
string userIdentity = "[email protected]";
// Retrieve all conversations the user is part of
var userConversations = UserConversationResource.Read(pathUserSid: userIdentity);
foreach (var userConversation in userConversations)
{
Console.WriteLine($"Conversation SID: {userConversation.ConversationSid}");
// You can fetch more details about the conversation if needed
var conversation = Twilio.Rest.Conversations.V1.ConversationResource.Fetch(pathSid: userConversation.ConversationSid);
Console.WriteLine($"Conversation Friendly Name: {conversation.FriendlyName}");
}
Servizi di comunicazione di Azure
Usare GetChatThreads
per recuperare tutti i thread di chat di cui fa parte l'utente.
AsyncPageable<ChatThreadItem> chatThreadItems = chatClient.GetChatThreadsAsync();
await foreach (ChatThreadItem chatThreadItem in chatThreadItems)
{
Console.WriteLine($"{ chatThreadItem.Id}");
}
Inviare un messaggio a un thread di chat
Twilio
Il frammento di codice seguente mostra come inviare un sms.
var message = MessageResource.Create(
body: "Hello, world!",
from: "[email protected]",
pathConversationSid: conversation.Sid
);
Il frammento di codice seguente mostra come inviare un file multimediale.
// The SID of the conversation you want to send the media message to
string conversationSid = "<CONVERSATION_SID>";
// The URL of the media file you want to send
var mediaUrl = new List<Uri>
{
new Uri("https://example.com/path/to/media/file.jpg") // Replace with your actual media URL
};
// Send the media message
var message = MessageResource.Create(
body: "Here is an image for you!",
from: "[email protected]", // Sender's identity (optional)
mediaUrl: mediaUrl,
pathConversationSid: conversationSid
);
Servizi di comunicazione di Azure
A differenza di Twilio, Servizi di comunicazione di Azure non ha una funzione separata per inviare sms o supporti.
Usare SendMessage
per inviare un messaggio a un thread.
- Usare
content
, obbligatorio, per fornire il contenuto per il messaggio. - Usare
type
per il tipo di contenuto del messaggio,Text
ad esempio oHtml
. Se non specificato,Text
è l'impostazione predefinita. - Usare
senderDisplayName
per specificare il nome visualizzato del mittente. Se non specificato, la stringa vuota è l'impostazione predefinita. - Usare
metadata
facoltativamente per includere altri dati da inviare insieme al messaggio. Questo campo fornisce un meccanismo per gli sviluppatori per estendere la funzione messaggio di chat e aggiungere informazioni personalizzate per il caso d'uso. Ad esempio, quando si condivide un collegamento al file nel messaggio, è possibile aggiungerehasAttachment:true
i metadati in modo che l'applicazione del destinatario possa analizzarla e visualizzare di conseguenza.
SendChatMessageOptions sendChatMessageOptions = new SendChatMessageOptions()
{
Content = "Please take a look at the attachment",
MessageType = ChatMessageType.Text
};
sendChatMessageOptions.Metadata["hasAttachment"] = "true";
sendChatMessageOptions.Metadata["attachmentUrl"] = "https://contoso.com/files/attachment.docx";
SendChatMessageResult sendChatMessageResult = await chatThreadClient.SendMessageAsync(sendChatMessageOptions);
string messageId = sendChatMessageResult.Id;
Ricevere messaggi di chat da un thread di chat
Twilio
Twilio usa in genere webhook per notificare al server i messaggi in arrivo:
Il frammento di codice seguente mostra come ricevere un sms.
public IActionResult ReceiveMessage()
{
var incomingMessage = Request.Form["Body"];
// Process the incoming message
return Ok();
}
Il frammento di codice seguente illustra come ricevere un file multimediale.
for (var i = 0; i < numMedia; i++)
{
var mediaUrl = Request.Form[$"MediaUrl{i}"];
Trace.WriteLine(mediaUrl);
var contentType = Request.Form[$"MediaContentType{i}"];
var filePath = GetMediaFileName(mediaUrl, contentType);
await DownloadUrlToFileAsync(mediaUrl, filePath);
}
Servizi di comunicazione di Azure
A differenza di Twilio, Servizi di comunicazione di Azure non ha una funzione separata per ricevere messaggi di testo o supporti.
Servizi di comunicazione di Azure Chat consente di sottoscrivere eventi direttamente all'interno dell'applicazione.
È possibile recuperare i messaggi di chat eseguendo il polling del metodo GetMessages
sul client del thread di chat a intervalli specificati.
AsyncPageable<ChatMessage> allMessages = chatThreadClient.GetMessagesAsync();
await foreach (ChatMessage message in allMessages)
{
Console.WriteLine($"{message.Id}:{message.Content.Message}");
}
GetMessages
accetta il parametro facoltativo DateTimeOffset
. Se tale offset viene specificato, si ricevono messaggi ricevuti, aggiornati o eliminati dopo di esso. I messaggi ricevuti prima del tempo di offset ma modificati o rimossi dopo la restituzione.
GetMessages
restituisce la versione più recente del messaggio, incluse eventuali modifiche o eliminazioni che si sono verificate nel messaggio usando UpdateMessage
e DeleteMessage
. Per i messaggi eliminati, chatMessage.DeletedOn
restituisce un valore datetime che indica quando il messaggio è stato eliminato. Per i messaggi modificati, chatMessage.EditedOn
restituisce un valore datetime che indica quando il messaggio è stato modificato. È possibile accedere all'ora originale di creazione del messaggio usando chatMessage.CreatedOn
e usarla per ordinare i messaggi.
GetMessages
restituisce tipi diversi di messaggi, che è possibile identificare da chatMessage.Type
. Questi tipi sono:
Text
: messaggio di chat normale inviato da un membro del thread.Html
: messaggio di testo formattato. Si noti che gli utenti di Servizi di comunicazione non possono attualmente inviareRichText
messaggi. Questo tipo di messaggio è supportato per i messaggi inviati da utenti di Teams a utenti di Servizi di comunicazione in scenari di interoperabilità di Teams.TopicUpdated
: messaggio di sistema che indica che l'argomento è stato aggiornato. (sola lettura)ParticipantAdded
: messaggio di sistema che indica che uno o più partecipanti sono stati aggiunti al thread di chat. (sola lettura)ParticipantRemoved
: messaggio di sistema che indica che un partecipante è stato rimosso dal thread di chat.
Per altre informazioni, vedere Tipi di messaggi.
Aggiungere un utente come partecipante al thread di chat
Twilio
var participant = ParticipantResource.Create(
pathConversationSid: conversation.Sid,
identity: "[email protected]"
);
Servizi di comunicazione di Azure
In Servizi di comunicazione di Azure si aggiungono partecipanti durante la creazione del thread di chat o in seguito:
Dopo aver creato un thread, è possibile aggiungere e rimuovere utenti. L'aggiunta di utenti consente loro di accedere per inviare messaggi al thread e aggiungere/rimuovere altri partecipanti. Prima di chiamare AddParticipants
, assicurarsi di acquisire un nuovo token di accesso e un'identità per tale utente. L'utente deve avere il token di accesso per inizializzare il client di chat.
Usare AddParticipants
per aggiungere uno o più partecipanti al thread di chat. Di seguito sono riportati gli attributi supportati per ogni partecipante del thread:
-
communicationUser
, obbligatorio, è l'identità del partecipante del thread. -
displayName
, facoltativo, è il nome visualizzato per il partecipante del thread. -
shareHistoryTime
, facoltativo, ora da cui la cronologia delle chat viene condivisa con il partecipante.
var josh = new CommunicationUserIdentifier(id: "<Access_ID_For_Josh>");
var gloria = new CommunicationUserIdentifier(id: "<Access_ID_For_Gloria>");
var amy = new CommunicationUserIdentifier(id: "<Access_ID_For_Amy>");
var participants = new[]
{
new ChatParticipant(josh) { DisplayName = "Josh" },
new ChatParticipant(gloria) { DisplayName = "Gloria" },
new ChatParticipant(amy) { DisplayName = "Amy" }
};
await chatThreadClient.AddParticipantsAsync(participants: participants);
Ottenere i partecipanti al thread
Twilio
In Conversazioni twilio si usa per ConversationResource
recuperare i partecipanti di una conversazione specifica. È quindi possibile elencare tutti i partecipanti associati a tale conversazione.
// The SID of the conversation you want to retrieve participants from
string conversationSid = "<CONVERSATION_SID>";
// Retrieve all participants in the conversation
var participants = ParticipantResource.Read(pathConversationSid: conversationSid);
// Output details of each participant
foreach (var participant in participants)
{
Console.WriteLine($"Participant SID: {participant.Sid}");
}
Servizi di comunicazione di Azure
Usare GetParticipants
per recuperare i partecipanti del thread di chat.
AsyncPageable<ChatParticipant> allParticipants = chatThreadClient.GetParticipantsAsync();
await foreach (ChatParticipant participant in allParticipants)
{
Console.WriteLine($"{((CommunicationUserIdentifier)participant.User).Id}:{participant.DisplayName}:{participant.ShareHistoryTime}");
}
Inviare ricevuta di lettura
Twilio
// Find your Account SID and Auth Token at twilio.com/console
// and set the environment variables. See http://twil.io/secure
string accountSid = Environment.GetEnvironmentVariable("TWILIO_ACCOUNT_SID");
string authToken = Environment.GetEnvironmentVariable("TWILIO_AUTH_TOKEN");
TwilioClient.Init(accountSid, authToken);
var message = await MessageResource.FetchAsync(
pathConversationSid: "CHXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
pathSid: "IMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
Console.WriteLine(message.Delivery);
}
Servizi di comunicazione di Azure
Usare SendReadReceipt
per notificare ad altri partecipanti che l'utente legge il messaggio.
await chatThreadClient.SendReadReceiptAsync(messageId: messageId);
Prerequisiti
- Account Azure: assicurarsi che l'account Azure sia attivo. I nuovi utenti possono creare un account gratuito in Microsoft Azure.
- Risorsa servizi di comunicazione: configurare una risorsa di Servizi di comunicazione tramite il portale di Azure e prendere nota del stringa di connessione.
- Interfaccia della riga di comando di Azure: seguire le istruzioni per installare l'interfaccia della riga di comando di Azure in Windows.
- Token di accesso utente: generare un token di accesso utente per creare un'istanza del client di chiamata. È possibile crearne uno usando l'interfaccia della riga di comando di Azure come indicato di seguito:
az communication identity token issue --scope voip --connection-string "yourConnectionString"
Per altre informazioni, vedere Usare l'interfaccia della riga di comando di Azure per creare e gestire i token di accesso.
Installazione
Installare le librerie
Per avviare la migrazione da Twilio Conversations Chat, il primo passaggio consiste nell'installare il Servizi di comunicazione di Azure Chat SDK per iOS nel progetto. È possibile configurare questi parametri usando CocoaPods
.
- Creare un podfile per l'applicazione. Aprire il terminale, passare alla cartella del progetto ed eseguire:
pod init
- Aggiungere il codice seguente al Podfile e salvare (assicurarsi che "target" corrisponda al nome del progetto):
pod 'AzureCommunicationChat', '~> 1.3.5'
- Configurare il
.xcworkspace
progetto:
pod install
- Aprire l'oggetto creato dall'installazione
.xcworkspace
del pod con Xcode.
Autenticazione nell'SDK
Per usare Servizi di comunicazione di Azure Chat SDK, è necessario eseguire l'autenticazione usando un token di accesso.
Twilio
I frammenti di codice seguenti presupporre la disponibilità di un token di accesso valido per i servizi Twilio.
static func getTokenUrlFromDefaults(identity: String, password: String) -> URL? {
// Get token service absolute URL from settings
guard let tokenServiceUrl = UserDefaults.standard.string(forKey: "ACCESS_TOKEN_SERVICE_URL"), !tokenServiceUrl.isEmpty else {
return nil
}
return constructLoginUrl(tokenServiceUrl, identity: identity, password: password)
}
Servizi di comunicazione di Azure
I frammenti di codice seguenti richiedono un token di accesso valido per avviare un oggetto CallClient
.
È necessario un token valido. Per altre informazioni, vedere Creare e gestire i token di accesso.
// Create an instance of CallClient
let callClient = CallClient()
// A reference to the call agent, it will be initialized later
var callAgent: CallAgent?
// Embed the token in a CommunicationTokenCredential object
let userCredential = try? CommunicationTokenCredential(token: "<USER_TOKEN>")
// Create a CallAgent that will be used later to initiate or receive calls
callClient.createCallAgent(userCredential: userCredential) { callAgent, error in
if error != nil {
// Raise the error to the user and return
}
self.callAgent = callAgent
}
Inizializzare il client chat
Twilio
Il frammento di codice seguente inizializza il client di chat in Twilio.
func fetchAccessTokenAndInitializeClient() {
let identity = "user_identity" // Replace with actual user identity
let urlString = "http://localhost:3000/token?identity=\(identity)"
guard let url = URL(string: urlString) else { return }
let task = URLSession.shared.dataTask(with: url) { data, response, error in
guard let data = data, error == nil else {
print("Error fetching token: \(String(describing: error))")
return
}
do {
if let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any],
let token = json["token"] as? String {
self.initializeConversationsClient(withToken: token)
}
} catch {
print("Error parsing token JSON: \(error)")
}
}
task.resume()
}
```m = TwilioVideoSDK.connect(options: connectOptions, delegate: self)
Servizi di comunicazione di Azure
Per creare un client di chat, usare l'endpoint di Servizi di comunicazione e il token di accesso generato come parte dei passaggi dei prerequisiti.
Sostituire <ACS_RESOURCE_ENDPOINT>
con l'endpoint della risorsa Servizi di comunicazione di Azure. Sostituire <ACCESS_TOKEN>
con un token di accesso valido di Servizi di comunicazione.
let endpoint = "<ACS_RESOURCE_ENDPOINT>"
let credential =
try CommunicationTokenCredential(
token: "<ACCESS_TOKEN>"
)
let options = AzureCommunicationChatClientOptions()
let chatClient = try ChatClient(
endpoint: endpoint,
credential: credential,
withOptions: options
)
Modello a oggetti
Le classi e le interfacce seguenti gestiscono alcune delle principali funzionalità di Servizi di comunicazione di Azure Chat SDK per iOS.
Nome | Descrizione |
---|---|
ChatClient |
Questa classe è necessaria per la funzione di chat. È possibile crearne un'istanza con le informazioni sulla sottoscrizione e usarla per creare, ottenere, eliminare thread e sottoscrivere eventi di chat. |
ChatThreadClient |
Questa classe è necessaria per la funzione thread di chat. Si ottiene un'istanza tramite ChatClient e la si usa per inviare, ricevere, aggiornare ed eliminare messaggi. È anche possibile usarlo per aggiungere, rimuovere, ottenere utenti e inviare notifiche di digitazione e ricevute di lettura. |
Avviare un thread di chat
Twilio
Il frammento di codice seguente consente di creare un nuovo thread di chat.
// the unique name of the conversation you create
private let uniqueConversationName = "general"
// For the quickstart, this will be the view controller
weak var delegate: QuickstartConversationsManagerDelegate?
// MARK: Conversations variables
private var client: TwilioConversationsClient?
private var conversation: TCHConversation?
private(set) var messages: [TCHMessage] = []
private var identity: String?
func conversationsClient(_ client: TwilioConversationsClient, synchronizationStatusUpdated status: TCHClientSynchronizationStatus) {
guard status == .completed else {
return
}
checkConversationCreation { (_, conversation) in
if let conversation = conversation {
self.joinConversation(conversation)
} else {
self.createConversation { (success, conversation) in
if success, let conversation = conversation {
self.joinConversation(conversation)
}
}
}
}
Servizi di comunicazione di Azure
La risposta restituita dalla creazione di un thread di chat è CreateChatThreadResult
.
Contiene una chatThread
proprietà , ovvero l'oggetto ChatThreadProperties
. Questo oggetto contiene l'oggetto threadId
, che è possibile usare per ottenere un ChatThreadClient
oggetto per l'esecuzione di operazioni sul thread creato: aggiungere partecipanti, inviare messaggi e così via.
Sostituire il commento <CREATE A CHAT THREAD>
con il frammento di codice seguente:
let request = CreateChatThreadRequest(
topic: "Quickstart",
participants: [
ChatParticipant(
id: CommunicationUserIdentifier("<USER_ID>"),
displayName: "Jack"
)
]
)
var threadId: String?
chatClient.create(thread: request) { result, _ in
switch result {
case let .success(result):
threadId = result.chatThread?.id
case .failure:
fatalError("Failed to create thread.")
}
semaphore.signal()
}
semaphore.wait()
Sostituire <USER_ID>
con un ID utente di Servizi di comunicazione valido.
Si sta usando un semaforo qui per attendere il gestore di completamento prima di continuare. Nei passaggi successivi, usare dalla threadId
risposta restituita al gestore di completamento.
Ottenere un client di thread di chat
Twilio
Il frammento di codice seguente illustra come ottenere un client di thread di chat in Twilio.
func conversationsClient(_ client: TwilioConversationsClient, synchronizationStatusUpdated status: TCHClientSynchronizationStatus) {
guard status == .completed else {
return
}
checkConversationCreation { (_, conversation) in
if let conversation = conversation {
self.joinConversation(conversation)
} else {
self.createConversation { (success, conversation) in
if success, let conversation = conversation {
self.joinConversation(conversation)
}
}
}
}
}
Servizi di comunicazione di Azure
Il metodo createClient
restituisce un ChatThreadClient
per un thread già esistente. È possibile usarlo per eseguire operazioni sul thread creato: aggiungere partecipanti, inviare messaggi e così via.
threadId
è l'ID univoco del thread di chat esistente.
Sostituire il commento <GET A CHAT THREAD CLIENT>
con il codice seguente:
let chatThreadClient = try chatClient.createClient(forThread: threadId!)
Inviare un messaggio a un thread di chat
A differenza di Twilio, Servizi di comunicazione di Azure non ha una funzione separata per inviare sms o supporti.
Twilio
Inviare un normale sms in Twilio.
func sendMessage(_ messageText: String,
completion: @escaping (TCHResult, TCHMessage?) -> Void) {
let messageOptions = TCHMessageOptions().withBody(messageText)
conversation?.sendMessage(with: messageOptions, completion: { (result, message) in
completion(result, message)
})
}
Inviare supporti in Twilio:
/ The data for the image you would like to send
let data = Data()
// Prepare the message and send it
self.conversation.prepareMessage
.addMedia(data: data, contentType: "image/jpeg", filename: "image.jpg", listener: .init(onStarted: {
// Called when upload of media begins.
print("Media upload started")
}, onProgress: { bytes in
// Called as upload progresses, with the current byte count.
print("Media upload progress: \(bytes)")
}, onCompleted: { sid in
// Called when upload is completed, with the new mediaSid if successful.
// Full failure details will be provided through sendMessage's completion.
print("Media upload completed")
}, onFailed: { error in
// Called when upload is completed, with the new mediaSid if successful.
// Full failure details will be provided through sendMessage's completion.
print("Media upload failed with error: \(error)")
}))
.buildAndSend { result, message in
if !result.isSuccessful {
print("Creation failed: \(String(describing: result.error))")
} else {
print("Creation successful")
}
}
Servizi di comunicazione di Azure
Usare il send
metodo per inviare un messaggio a un thread identificato da threadId
.
Usare SendChatMessageRequest
per descrivere la richiesta di messaggio:
- Usare
content
per fornire il contenuto del messaggio di chat. - Usare
senderDisplayName
per specificare il nome visualizzato del mittente. - Usare
type
per specificare il tipo di messaggio, ad esempiotext
ohtml
. - Usare
metadata
facoltativamente per includere tutte le informazioni da inviare insieme al messaggio. Questo campo fornisce agli sviluppatori un meccanismo per estendere la funzionalità dei messaggi di chat e aggiungere informazioni personalizzate per il caso d'uso. Ad esempio, quando si condivide un collegamento al file nel messaggio, è possibile aggiungerehasAttachment:true
metadati in modo che l'applicazione del destinatario possa analizzare e visualizzare di conseguenza.
La risposta restituita dall'invio di un messaggio èSendChatMessageResult
. Contiene un ID, ovvero l'ID univoco del messaggio.
Sostituire il commento <SEND A MESSAGE>
con il frammento di codice seguente:
let message = SendChatMessageRequest(
content: "Hello!",
senderDisplayName: "Jack",
type: .text,
metadata: [
"hasAttachment": "true",
"attachmentUrl": "https://contoso.com/files/attachment.docx"
]
)
var messageId: String?
chatThreadClient.send(message: message) { result, _ in
switch result {
case let .success(result):
print("Message sent, message id: \(result.id)")
messageId = result.id
case .failure:
print("Failed to send message")
}
semaphore.signal()
}
semaphore.wait()
Ricevere messaggi di chat da un thread di chat
A differenza di Twilio, Servizi di comunicazione di Azure non dispone di una funzione separata per ricevere sms o supporti.
Twilio
Il frammento di codice seguente illustra come ricevere un sms in Twilio.
// Called whenever a conversation we've joined receives a new message
func conversationsClient(_ client: TwilioConversationsClient, conversation: TCHConversation,
messageAdded message: TCHMessage) {
messages.append(message)
// Changes to the delegate should occur on the UI thread
DispatchQueue.main.async {
if let delegate = self.delegate {
delegate.reloadMessages()
delegate.receivedNewMessage()
}
}
}
Ricevere supporti in Twilio:
conversationsClient.getTemporaryContentUrlsForMedia(message.attachedMedia) { result, mediaSidToUrlMap in
guard result.isSuccessful else {
print("Couldn't get temporary urls with error: \(String(describing: result.error))")
return
}
for (sid, url) in sidToUrlMap {
print("\(sid) -> \(url)")
}
}
Servizi di comunicazione di Azure
Con la segnalazione in tempo reale, è possibile sottoscrivere l'ascolto dei nuovi messaggi in arrivo e aggiornare i messaggi correnti in memoria di conseguenza. Servizi di comunicazione Azure supporta un elenco di eventi che è possibile sottoscrivere.
Sostituire il commento <RECEIVE MESSAGES>
con il codice seguente. Dopo aver abilitato le notifiche, provare a inviare nuovi messaggi per visualizzare .ChatMessageReceivedEvents
chatClient.startRealTimeNotifications { result in
switch result {
case .success:
print("Real-time notifications started.")
case .failure:
print("Failed to start real-time notifications.")
}
semaphore.signal()
}
semaphore.wait()
chatClient.register(event: .chatMessageReceived, handler: { response in
switch response {
case let .chatMessageReceivedEvent(event):
print("Received a message: \(event.message)")
default:
return
}
})
In alternativa, è possibile recuperare i messaggi di chat eseguendo il polling del metodo listMessages
a intervalli specificati. Vedere il frammento di codice seguente per listMessages
.
chatThreadClient.listMessages { result, _ in
switch result {
case let .success(messagesResult):
guard let messages = messagesResult.pageItems else {
print("No messages returned.")
return
}
for message in messages {
print("Received message with id: \(message.id)")
}
case .failure:
print("Failed to receive messages")
}
semaphore.signal()
}
semaphore.wait()
Notifiche push
Analogamente a Twilio, Servizi di comunicazione di Azure supportano le notifiche push. Le notifiche push notificano ai client i messaggi in arrivo in un thread di chat se l'app per dispositivi mobili non è in esecuzione in primo piano.
Attualmente l'invio di notifiche push di chat con Hub di notifica è supportato per iOS SDK nella versione 1.3.0.
Per altre informazioni, vedere Abilitare la notifica push nell'app di chat.
Prerequisiti
Creare un account Azure con una sottoscrizione attiva. Per informazioni dettagliate vedere Creare un account gratuito.
Installare Visual Studio.
Creare una risorsa di Servizi di comunicazione di Azure. Per informazioni dettagliate vedere Creare una risorsa di comunicazione di servizi di Azure. Registrare l'endpoint della risorsa e stringa di connessione.
Un token di accesso utente. Assicurarsi di impostare l'ambito per la chat e prendere nota della stringa del token e user_id stringa. È anche possibile usare l'interfaccia della riga di comando di Azure ed eseguire il comando seguente con il stringa di connessione per creare un utente e un token di accesso.
az communication identity token issue --scope chat --connection-string "yourConnectionString"
Per altre informazioni, vedere Usare l'interfaccia della riga di comando di Azure per creare e gestire i token di accesso.
Differenza concettuale
Sia Le conversazioni Twilio che Servizi di comunicazione di Azure Chat offrono funzioni simili, ma la loro implementazione differisce a causa degli ecosistemi circostanti e delle filosofie della piattaforma sottostanti. Le conversazioni twilio forniscono un'API di comunicazione multicanale. Servizi di comunicazione di Azure Chat è incentrata principalmente sulla chat all'interno dell'ecosistema di Azure. Questa guida alla migrazione fornisce un mapping di base tra le operazioni comuni in Twilio e i relativi equivalenti in Servizi di comunicazione di Azure Chat, consentendo di eseguire la transizione del codice .NET.
Identità
Twilio
Le conversazioni twilio usano direttamente stringhe di identità.
Servizi di comunicazione di Azure
Servizi di comunicazione di Azure richiede la creazione di utenti tramite .CommunicationIdentityClient
Configurazione
Installare il pacchetto
Per avviare la migrazione dalla chat di Twilio Conversations, il primo passaggio consiste nell'installare Servizi di comunicazione di Azure Chat SDK per .NET nel progetto.
dotnet add package Azure.Communication.Chat
Modello a oggetti
Le classi seguenti gestiscono alcune delle principali funzionalità di Servizi di comunicazione di Azure Chat SDK per C#.
Nome | Descrizione |
---|---|
ChatClient |
Questa classe è necessaria per la funzionalità di chat. È possibile crearne un'istanza con le informazioni sulla sottoscrizione e usarla per creare, ottenere ed eliminare thread. |
ChatThreadClient |
Questa classe è necessaria per la funzionalità di thread di chat. Si ottiene un'istanza tramite ChatClient e la si usa per inviare/ricevere/aggiornare/eliminare messaggi, aggiungere/rimuovere/ottenere partecipanti, inviare notifiche di digitazione e ricevute di lettura. |
Creare un client di chat
Twilio
Twilio richiede di configurare il client Twilio usando le credenziali dell'account:
var twilio = new TwilioRestClient(accountSid, authToken);
Servizi di comunicazione di Azure
Per creare un client di chat in Servizi di comunicazione di Azure, usare l'endpoint di Servizi di comunicazione e il token di accesso generato come parte dei passaggi dei prerequisiti. È necessario usare la CommunicationIdentityClient
classe di Identity SDK per creare un utente e rilasciare un token da passare al client di chat.
Vedere altre informazioni sui token di accesso utente.
// Your unique Azure Communication service endpoint
Uri endpoint = new Uri("<replace with your resource endpoint>");
CommunicationTokenCredential communicationTokenCredential = new CommunicationTokenCredential(<Access_Token>);
ChatClient chatClient = new ChatClient(endpoint, communicationTokenCredential);
Avviare un thread di chat
Conversazioni twilio
var conversation = ConversationResource.Create(
friendlyName: "My Conversation",
messagingServiceSid: "<MessagingServiceSid>"
);
Servizi di comunicazione di Azure
In Servizi di comunicazione di Azure si crea un thread equivalente a una conversazione in Twilio.
Per creare un thread di chat, usare il createChatThread
metodo in chatClient
:
- Usare
topic
per dare un argomento a questa chat. È possibile aggiornare dopotopic
la creazione del thread di chat usando laUpdateTopic
funzione . - Usare la proprietà
participants
per passare un elenco di oggettiChatParticipant
da aggiungere al thread di chat. Inizializzare l'oggettoChatParticipant
con unCommunicationIdentifier
oggetto .CommunicationIdentifier
può essere di tipoCommunicationUserIdentifier
,MicrosoftTeamsUserIdentifier
oPhoneNumberIdentifier
. Ad esempio, per ottenere unCommunicationIdentifier
oggetto, è necessario passare un ID di accesso creato seguendo le istruzioni riportate in Creare un utente.
L'oggetto risposta del createChatThread
metodo contiene i chatThread
dettagli. Per interagire con le operazioni del thread di chat, ad esempio l'aggiunta di partecipanti, l'invio di un messaggio, l'eliminazione di un messaggio e così via, creare un'istanza chatThreadClient
client usando il GetChatThreadClient
metodo nel ChatClient
client.
var chatParticipant = new ChatParticipant(identifier: new CommunicationUserIdentifier(id: "<Access_ID>"))
{
DisplayName = "UserDisplayName"
};
CreateChatThreadResult createChatThreadResult = await chatClient.CreateChatThreadAsync(topic: "Hello world!", participants: new[] { chatParticipant });
ChatThreadClient chatThreadClient = chatClient.GetChatThreadClient(threadId: createChatThreadResult.ChatThread.Id);
string threadId = chatThreadClient.Id;
Ottenere un client di thread di chat
Twilio
Nelle conversazioni twilio si interagisce direttamente con una conversazione usando il SID della conversazione (identificatore univoco). Ecco come ottenere in genere una conversazione e interagire con essa:
var conversationSid = "<CONVERSATION_SID>";
var conversation = ConversationResource.Fetch(pathSid: conversationSid);
// Example: Fetching all messages in the conversation
var messages = MessageResource.Read(pathConversationSid: conversationSid);
foreach (var message in messages)
{
Console.WriteLine(message.Body);
}
Servizi di comunicazione di Azure
Il metodo GetChatThreadClient
restituisce un client di thread per un thread già esistente. È possibile usarlo per eseguire operazioni sul thread creato: aggiungere membri, inviare messaggi e così via.
threadId
è l'ID univoco del thread di chat esistente.
string threadId = "<THREAD_ID>";
ChatThreadClient chatThreadClient = chatClient.GetChatThreadClient(threadId: threadId);
Elencare tutti i thread di chat
Twilio
In Conversazioni twilio è possibile recuperare tutte le conversazioni in cui un utente è un partecipante eseguendo una query sulla UserConversations
risorsa. Questa risorsa fornisce un elenco di conversazioni per un utente specifico.
/ Initialize Twilio Client
string accountSid = "<YOUR_ACCOUNT_SID>";
string authToken = "<YOUR_AUTH_TOKEN>";
TwilioClient.Init(accountSid, authToken);
// The identity of the user you're querying
string userIdentity = "[email protected]";
// Retrieve all conversations the user is part of
var userConversations = UserConversationResource.Read(pathUserSid: userIdentity);
foreach (var userConversation in userConversations)
{
Console.WriteLine($"Conversation SID: {userConversation.ConversationSid}");
// You can fetch more details about the conversation if needed
var conversation = Twilio.Rest.Conversations.V1.ConversationResource.Fetch(pathSid: userConversation.ConversationSid);
Console.WriteLine($"Conversation Friendly Name: {conversation.FriendlyName}");
}
Servizi di comunicazione di Azure
Usare GetChatThreads
per recuperare tutti i thread di chat di cui fa parte l'utente.
AsyncPageable<ChatThreadItem> chatThreadItems = chatClient.GetChatThreadsAsync();
await foreach (ChatThreadItem chatThreadItem in chatThreadItems)
{
Console.WriteLine($"{ chatThreadItem.Id}");
}
Inviare un messaggio a un thread di chat
Twilio
Il frammento di codice seguente mostra come inviare un sms.
var message = MessageResource.Create(
body: "Hello, world!",
from: "[email protected]",
pathConversationSid: conversation.Sid
);
Il frammento di codice seguente mostra come inviare un file multimediale.
// The SID of the conversation you want to send the media message to
string conversationSid = "<CONVERSATION_SID>";
// The URL of the media file you want to send
var mediaUrl = new List<Uri>
{
new Uri("https://example.com/path/to/media/file.jpg") // Replace with your actual media URL
};
// Send the media message
var message = MessageResource.Create(
body: "Here is an image for you!",
from: "[email protected]", // Sender's identity (optional)
mediaUrl: mediaUrl,
pathConversationSid: conversationSid
);
Servizi di comunicazione di Azure
A differenza di Twilio, Servizi di comunicazione di Azure non ha una funzione separata per inviare sms o supporti.
Usare SendMessage
per inviare un messaggio a un thread.
- Usare
content
per fornire il contenuto per il messaggio, è obbligatorio. - Usare
type
per il tipo di contenuto del messaggio,Text
ad esempio oHtml
. Se non specificato,Text
è l'impostazione predefinita. - Usare
senderDisplayName
per specificare il nome visualizzato del mittente. Se non specificato, la stringa vuota è l'impostazione predefinita. - Usare
metadata
facoltativamente per includere tutti gli altri dati da inviare insieme al messaggio. Questo campo fornisce un meccanismo per gli sviluppatori per estendere la funzione messaggio di chat e aggiungere informazioni personalizzate per il caso d'uso. Ad esempio, quando si condivide un collegamento al file nel messaggio, è possibile aggiungerehasAttachment:true
i metadati in modo che l'applicazione del destinatario possa analizzarla e visualizzare di conseguenza.
SendChatMessageOptions sendChatMessageOptions = new SendChatMessageOptions()
{
Content = "Please take a look at the attachment",
MessageType = ChatMessageType.Text
};
sendChatMessageOptions.Metadata["hasAttachment"] = "true";
sendChatMessageOptions.Metadata["attachmentUrl"] = "https://contoso.com/files/attachment.docx";
SendChatMessageResult sendChatMessageResult = await chatThreadClient.SendMessageAsync(sendChatMessageOptions);
string messageId = sendChatMessageResult.Id;
Ricevere messaggi di chat da un thread di chat
Twilio
Twilio usa in genere webhook per notificare al server i messaggi in arrivo:
Il frammento di codice seguente mostra come ricevere un sms.
public IActionResult ReceiveMessage()
{
var incomingMessage = Request.Form["Body"];
// Process the incoming message
return Ok();
}
Il frammento di codice seguente illustra come ricevere un file multimediale.
for (var i = 0; i < numMedia; i++)
{
var mediaUrl = Request.Form[$"MediaUrl{i}"];
Trace.WriteLine(mediaUrl);
var contentType = Request.Form[$"MediaContentType{i}"];
var filePath = GetMediaFileName(mediaUrl, contentType);
await DownloadUrlToFileAsync(mediaUrl, filePath);
}
Servizi di comunicazione di Azure
A differenza di Twilio, Servizi di comunicazione di Azure non ha una funzione separata per ricevere messaggi di testo o supporti.
Servizi di comunicazione di Azure Chat consente di sottoscrivere eventi direttamente all'interno dell'applicazione.
È possibile recuperare i messaggi di chat eseguendo il polling del metodo GetMessages
sul client del thread di chat a intervalli specificati.
AsyncPageable<ChatMessage> allMessages = chatThreadClient.GetMessagesAsync();
await foreach (ChatMessage message in allMessages)
{
Console.WriteLine($"{message.Id}:{message.Content.Message}");
}
GetMessages
accetta il parametro facoltativo DateTimeOffset
. Se tale offset viene specificato, si ricevono messaggi ricevuti, aggiornati o eliminati dopo di esso. I messaggi ricevuti prima del tempo di offset ma modificati o rimossi dopo la restituzione.
GetMessages
restituisce la versione più recente del messaggio, incluse eventuali modifiche o eliminazioni che si sono verificate nel messaggio usando UpdateMessage
e DeleteMessage
. Per i messaggi eliminati, chatMessage.DeletedOn
restituisce un valore datetime che indica quando il messaggio è stato eliminato. Per i messaggi modificati, chatMessage.EditedOn
restituisce un valore datetime che indica quando il messaggio è stato modificato. È possibile accedere all'ora originale di creazione del messaggio usando chatMessage.CreatedOn
e usarla per ordinare i messaggi.
GetMessages
restituisce tipi diversi di messaggi, che possono essere identificati da chatMessage.Type
. Questi tipi sono:
Text
: messaggio di chat normale inviato da un membro del thread.Html
: messaggio di testo formattato. Gli utenti di Servizi di comunicazione non possono attualmente inviareRichText
messaggi. Questo tipo di messaggio è supportato per i messaggi inviati da utenti di Teams a utenti di Servizi di comunicazione in scenari di interoperabilità di Teams.TopicUpdated
: messaggio di sistema che indica che l'argomento è stato aggiornato. (sola lettura)ParticipantAdded
: messaggio di sistema che indica che uno o più partecipanti sono stati aggiunti al thread di chat. (sola lettura)ParticipantRemoved
: messaggio di sistema che indica che un partecipante è stato rimosso dal thread di chat.
Per altre informazioni, vedere Tipi di messaggi.
Aggiungere un utente come partecipante al thread di chat
Twilio
var participant = ParticipantResource.Create(
pathConversationSid: conversation.Sid,
identity: "[email protected]"
);
Servizi di comunicazione di Azure
In Servizi di comunicazione di Azure si aggiungono partecipanti durante la creazione del thread di chat o in seguito:
Dopo aver creato un thread, è possibile aggiungere e rimuovere utenti. L'aggiunta di utenti consente loro di accedere per inviare messaggi al thread e aggiungere/rimuovere altri partecipanti. Prima di chiamare AddParticipants
, assicurarsi di acquisire un nuovo token di accesso e un'identità per tale utente. L'utente deve avere il token di accesso per inizializzare il client di chat.
Usare AddParticipants
per aggiungere uno o più partecipanti al thread di chat. Di seguito sono riportati gli attributi supportati per ogni partecipante del thread:
-
communicationUser
, obbligatorio, è l'identità del partecipante del thread. -
displayName
, facoltativo, è il nome visualizzato per il partecipante del thread. -
shareHistoryTime
, facoltativo, ora da cui la cronologia delle chat viene condivisa con il partecipante.
var josh = new CommunicationUserIdentifier(id: "<Access_ID_For_Josh>");
var gloria = new CommunicationUserIdentifier(id: "<Access_ID_For_Gloria>");
var amy = new CommunicationUserIdentifier(id: "<Access_ID_For_Amy>");
var participants = new[]
{
new ChatParticipant(josh) { DisplayName = "Josh" },
new ChatParticipant(gloria) { DisplayName = "Gloria" },
new ChatParticipant(amy) { DisplayName = "Amy" }
};
await chatThreadClient.AddParticipantsAsync(participants: participants);
Ottenere i partecipanti al thread
Twilio
In Conversazioni twilio si usa per ConversationResource
recuperare i partecipanti di una conversazione specifica. È quindi possibile elencare tutti i partecipanti associati a tale conversazione.
// The SID of the conversation you want to retrieve participants from
string conversationSid = "<CONVERSATION_SID>";
// Retrieve all participants in the conversation
var participants = ParticipantResource.Read(pathConversationSid: conversationSid);
// Output details of each participant
foreach (var participant in participants)
{
Console.WriteLine($"Participant SID: {participant.Sid}");
}
Servizi di comunicazione di Azure
Usare GetParticipants
per recuperare i partecipanti del thread di chat.
AsyncPageable<ChatParticipant> allParticipants = chatThreadClient.GetParticipantsAsync();
await foreach (ChatParticipant participant in allParticipants)
{
Console.WriteLine($"{((CommunicationUserIdentifier)participant.User).Id}:{participant.DisplayName}:{participant.ShareHistoryTime}");
}
Inviare ricevuta di lettura
Twilio
// Find your Account SID and Auth Token at twilio.com/console
// and set the environment variables. See http://twil.io/secure
string accountSid = Environment.GetEnvironmentVariable("TWILIO_ACCOUNT_SID");
string authToken = Environment.GetEnvironmentVariable("TWILIO_AUTH_TOKEN");
TwilioClient.Init(accountSid, authToken);
var message = await MessageResource.FetchAsync(
pathConversationSid: "CHXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
pathSid: "IMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
Console.WriteLine(message.Delivery);
}
Servizi di comunicazione di Azure
Usare SendReadReceipt
per notificare ad altri partecipanti che l'utente legge il messaggio.
await chatThreadClient.SendReadReceiptAsync(messageId: messageId);
Prerequisiti
Un account Azure con una sottoscrizione attiva. Creare un account gratuitamente.
Java Development Kit (JDK) versione 8 o successiva.
Creare una risorsa di Servizi di comunicazione di Azure. Per informazioni dettagliate vedere Creare una risorsa di comunicazione di servizi di Azure. È necessario registrare l'endpoint della risorsa e stringa di connessione.
Un token di accesso utente. Assicurarsi di impostare l'ambito per la chat e prendere nota della stringa del token e della stringa user_id. È anche possibile usare l'interfaccia della riga di comando di Azure ed eseguire il comando seguente con il stringa di connessione per creare un utente e un token di accesso.
az communication identity token issue --scope chat --connection-string "yourConnectionString"
Per informazioni dettagliate, vedere Usare l'interfaccia della riga di comando di Azure per creare e gestire i token di accesso.
Configurazione
Aggiungere i riferimenti al pacchetto per Chat SDK
Twilio
Per usare le API Chat di conversazioni Twilio nell'applicazione Java, aggiungere la dipendenza seguente nel pom.xml:
<dependencies>
<!-- Twilio Java SDK -->
<dependency>
<groupId>com.twilio.sdk</groupId>
<artifactId>twilio</artifactId>
<version>8.31.1</version>
</dependency>
</dependencies>
Servizi di comunicazione di Azure
Nel file POM fare riferimento al pacchetto azure-communication-chat
con le API di chat:
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-communication-chat</artifactId>
<version><!-- Please refer to https://search.maven.org/artifact/com.azure/azure-communication-chat for the latest version --></version>
</dependency>
Per l'autenticazione, il client deve fare riferimento al pacchetto azure-communication-common
:
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-communication-common</artifactId>
<version><!-- Please refer to https://search.maven.org/artifact/com.azure/azure-communication-common for the latest version --></version>
</dependency>
Modello a oggetti
Le classi e le interfacce seguenti gestiscono alcune delle principali funzionalità di Servizi di comunicazione di Azure Chat SDK per Java.
Nome | Descrizione |
---|---|
ChatClient |
Questa classe è necessaria per la funzione Chat. Crearne un'istanza con le informazioni sulla sottoscrizione e usarla per creare, ottenere ed eliminare thread. |
ChatAsyncClient |
Questa classe è necessaria per la funzione chat asincrona. Crearne un'istanza con le informazioni sulla sottoscrizione e usarla per creare, ottenere ed eliminare thread. |
ChatThreadClient |
Questa classe è necessaria per la funzione Thread di chat. Si ottiene un'istanza ChatClient tramite e la si usa per inviare/ricevere/aggiornare/eliminare messaggi, aggiungere/rimuovere/ottenere utenti, inviare notifiche di digitazione e leggere le ricevute. |
ChatThreadAsyncClient |
Questa classe è necessaria per la funzione thread chat asincrona. Si ottiene un'istanza ChatAsyncClient tramite e la si usa per inviare/ricevere/aggiornare/eliminare messaggi, aggiungere/rimuovere/ottenere utenti, inviare notifiche di digitazione e leggere le ricevute. |
Import
Twilio
import com.twilio.Twilio;
import com.twilio.rest.conversations.v1.Conversation;
Servizi di comunicazione di Azure
package com.communication.quickstart;
import com.azure.communication.chat.*;
import com.azure.communication.chat.models.*;
import com.azure.communication.common.*;
import com.azure.core.http.rest.PagedIterable;
import java.io.*;
import java.util.*;
Creare un client di chat
Twilio
In Twilio si inizializza il client usando il SID account e il token di autenticazione. Ecco come in genere si inizializza un client.
String accountSid = "<YOUR_ACCOUNT_SID>";
String authToken = "<YOUR_AUTH_TOKEN>";
// Initialize Twilio client
Twilio.init(accountSid, authToken);
Servizi di comunicazione di Azure
Per creare un client di chat, usare l'endpoint del servizio comunicazioni e il token di accesso generato come parte dei passaggi dei prerequisiti. I token di accesso utente consentono di creare applicazioni client che eseguono l'autenticazione direttamente in Servizi di comunicazione di Azure. Dopo aver generato questi token nel server, passarli a un dispositivo client. È necessario usare la CommunicationTokenCredential
classe di Common SDK per passare il token al client di chat.
Altre informazioni sull'architettura di chat
Quando si aggiungono le istruzioni import, assicurarsi di aggiungere solo importazioni dagli com.azure.communication.chat
spazi dei nomi e com.azure.communication.chat.models
e non dallo spazio dei com.azure.communication.chat.implementation
nomi .
App.java
Nel file generato tramite Maven è possibile usare il codice seguente per avviare:
// Your unique Azure Communication service endpoint
String endpoint = "<replace with your resource endpoint>";
// User access token fetched from your trusted service
String userAccessToken = "<USER_ACCESS_TOKEN>";
// Create a CommunicationTokenCredential with the given access token, which is only valid until the token is valid
CommunicationTokenCredential userCredential = new CommunicationTokenCredential(userAccessToken);
// Initialize the chat client
final ChatClientBuilder builder = new ChatClientBuilder();
builder.endpoint(endpoint)
.credential(userCredential);
ChatClient chatClient = builder.buildClient();
Avviare un thread di chat
Twilio
La creazione di una conversazione in Twilio è semplice tramite il Conversation.creator()
metodo .
setFriendlyName
Usare per fornire un argomento a questa chat.
// Create a new conversation
Conversation conversation = Conversation.creator().setFriendlyName("New Conversation").create();
System.out.println(conversation.getSid());
Servizi di comunicazione di Azure
Usare il metodo createChatThread
per creare un thread di chat.
- Usare
createChatThreadOptions
per descrivere la richiesta di thread. - Usare il
topic
parametro del costruttore per assegnare un argomento a questa chat. Aggiornare 'topic' dopo la creazione del thread di chat usando laUpdateThread
funzione . - Usare
participants
per elencare i partecipanti al thread da aggiungere al thread.ChatParticipant
accetta l'utente creato nella guida di avvio rapido Token di accesso utente.
CreateChatThreadResult
è la risposta restituita dalla creazione di un thread di chat.
Contiene un getChatThread()
metodo che restituisce l'oggetto ChatThread
che può essere usato per ottenere il client thread da cui è possibile ottenere ChatThreadClient
per eseguire operazioni sul thread creato: aggiungere partecipanti, inviare messaggi e così via.
L'oggetto ChatThread
contiene anche il getId()
metodo , che recupera l'ID univoco del thread.
CommunicationUserIdentifier identity1 = new CommunicationUserIdentifier("<USER_1_ID>");
CommunicationUserIdentifier identity2 = new CommunicationUserIdentifier("<USER_2_ID>");
ChatParticipant firstThreadParticipant = new ChatParticipant()
.setCommunicationIdentifier(identity1)
.setDisplayName("Participant Display Name 1");
ChatParticipant secondThreadParticipant = new ChatParticipant()
.setCommunicationIdentifier(identity2)
.setDisplayName("Participant Display Name 2");
CreateChatThreadOptions createChatThreadOptions = new CreateChatThreadOptions("Topic")
.addParticipant(firstThreadParticipant)
.addParticipant(secondThreadParticipant);
CreateChatThreadResult result = chatClient.createChatThread(createChatThreadOptions);
String chatThreadId = result.getChatThread().getId();
Elencare i thread di chat
Twilio
Per elencare tutte le conversazioni in Twilio usando Java:
public static void main(String[] args) {
// List all conversations
ResourceSet<Conversation> conversations = Conversation.reader().read();
for (Conversation conversation : conversations) {
System.out.println("Conversation SID: " + conversation.getSid());
System.out.println("Friendly Name: " + conversation.getFriendlyName());
System.out.println("Date Created: " + conversation.getDateCreated());
}
}
Servizi di comunicazione di Azure
Usare il listChatThreads
metodo per recuperare un elenco di thread di chat esistenti.
PagedIterable<ChatThreadItem> chatThreads = chatClient.listChatThreads();
chatThreads.forEach(chatThread -> {
System.out.printf("ChatThread id is %s.\n", chatThread.getId());
});
Ottenere un client di thread di chat
Twilio
Ecco come recuperare e interagire con una conversazione specifica in Twilio usando Java:
// Retrieve a specific conversation by its SID
Conversation conversation = Conversation.fetcher(conversationSid).fetch();
System.out.println("Retrieved Conversation SID: " + conversation.getSid());
System.out.println("Friendly Name: " + conversation.getFriendlyName())
Servizi di comunicazione di Azure
Il metodo getChatThreadClient
restituisce un client di thread per un thread già esistente. Usarlo per eseguire operazioni sul thread creato: aggiungere partecipanti, inviare messaggi e così via.
chatThreadId
è l'ID univoco del thread di chat esistente.
ChatThreadClient chatThreadClient = chatClient.getChatThreadClient(chatThreadId);
Inviare un messaggio a un thread di chat
Twilio
L'invio di un messaggio in Twilio usa il Message.creator()
metodo .
import com.twilio.rest.conversations.v1.conversation.Message;
Message message = Message.creator(conversationSid)
.setBody("Hello, World!")
.create();
System.out.println("Message SID: " + message.getSid());
Twilio consente di inviare file multimediali fornendo un URL multimediale durante l'invio di un messaggio.
List<URI> mediaUrls = Arrays.asList(URI.create("https://example.com/image.jpg"));
Message message = Message.creator(conversationSid)
.setBody("Check out this image!")
.setMediaUrl(mediaUrls)
.create();
System.out.println("Message SID: " + message.getSid());
Servizi di comunicazione di Azure
A differenza di Twilio, Servizi di comunicazione di Azure non dispone di funzioni separate per l'invio di supporti.
Usare il sendMessage
metodo per inviare un messaggio al thread creato, identificato da chatThreadId
.
Usare sendChatMessageOptions
per descrivere la richiesta di messaggi di chat.
- Usare
content
per fornire il contenuto del messaggio di chat. - Usare
type
per specificare il tipo di contenuto del messaggio di chat:TEXT
oHTML
. - Usare
senderDisplayName
per specificare il nome visualizzato del mittente. - Usare
metadata
facoltativamente per includere tutti i dati da inviare con il messaggio. Questo campo consente agli sviluppatori di estendere la funzione messaggio di chat e aggiungere informazioni personalizzate per il caso d'uso. Ad esempio, quando si condivide un collegamento al file nel messaggio, è possibile aggiungerehasAttachment:true
metadati in modo che l'applicazione del destinatario possa analizzare e visualizzare di conseguenza.
Il sendChatMessageResult
di risposta contiene un id
, ovvero l'ID univoco del messaggio.
Map<String, String> metadata = new HashMap<String, String>();
metadata.put("hasAttachment", "true");
metadata.put("attachmentUrl", "https://contoso.com/files/attachment.docx");
SendChatMessageOptions sendChatMessageOptions = new SendChatMessageOptions()
.setContent("Please take a look at the attachment")
.setType(ChatMessageType.TEXT)
.setSenderDisplayName("Sender Display Name")
.setMetadata(metadata);
SendChatMessageResult sendChatMessageResult = chatThreadClient.sendMessage(sendChatMessageOptions);
String chatMessageId = sendChatMessageResult.getId();
Ricevere messaggi di chat da un thread di chat
Twilio
Le conversazioni twilio usano webhook per ricevere messaggi. In genere si configura un URL webhook nella console di Twilio.
// This would be handled by a servlet or similar in a Java web application
public void handleIncomingMessage(HttpServletRequest request, HttpServletResponse response) {
String body = request.getParameter("Body");
System.out.println("Received message: " + body);
}
Per ricevere il file multimediale in Twilio.
private static final Logger logger = Logger.getLogger(TwilioWebhookServlet.class.getName());
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Get the number of media items attached to the message
String numMedia = request.getParameter("NumMedia");
int mediaCount = Integer.parseInt(numMedia);
if (mediaCount > 0) {
// Loop through each media file received
for (int i = 0; i < mediaCount; i++) {
// Get the media URL from the request
String mediaUrl = request.getParameter("MediaUrl" + i);
String mediaContentType = request.getParameter("MediaContentType" + i);
logger.info("Received media file: " + mediaUrl + " with content type: " + mediaContentType);
// Process the media file (e.g., download, store, etc.)
// Example: Download and save the file, or send it to another service
}
} else {
// Handle a message with no media
String messageBody = request.getParameter("Body");
logger.info("Received text message: " + messageBody);
}
Servizi di comunicazione di Azure
È possibile recuperare i messaggi di chat eseguendo il polling del metodo listMessages
sul client del thread di chat a intervalli specificati.
chatThreadClient.listMessages().forEach(message -> {
System.out.printf("Message id is %s.\n", message.getId());
});
listMessages
restituisce la versione più recente del messaggio, incluse eventuali modifiche o eliminazioni che si sono verificate nel messaggio usando .editMessage()
e .deleteMessage()
. Per i messaggi eliminati, chatMessage.getDeletedOn()
restituisce un datetime
valore che indica quando il messaggio è stato eliminato. Per i messaggi modificati, chatMessage.getEditedOn()
restituisce un valore datetime che indica quando il messaggio è stato modificato. È possibile accedere all'ora originale di creazione del messaggio usando chatMessage.getCreatedOn()
e tale ora può essere usata per ordinare i messaggi.
Altre informazioni sui tipi di messaggio sono disponibili qui: Tipi di messaggi.
Inviare ricevuta di lettura
Twilio
Le conversazioni twilio non hanno un'API diretta per l'invio di ricevute di lettura. Twilio Conversations gestisce automaticamente le ricevute di lettura.
Servizi di comunicazione di Azure
Usare il sendReadReceipt
metodo per pubblicare un evento di ricezione di lettura in un thread di chat per conto di un utente.
chatMessageId
è l'ID univoco del messaggio di chat letto.
String chatMessageId = message.getId();
chatThreadClient.sendReadReceipt(chatMessageId);
Elencare i partecipanti alla chat
Twilio
Per recuperare i partecipanti in una conversazione twilio:
ResourceSet<Participant> participants = Participant.reader(conversationSid).read();
for (Participant participant : participants) {
System.out.println("Participant SID: " + participant.getSid());
}
Servizi di comunicazione di Azure
Usare listParticipants
per recuperare una raccolta di pagine contenente i partecipanti del thread di chat identificato da chatThreadId.
PagedIterable<ChatParticipant> chatParticipantsResponse = chatThreadClient.listParticipants();
chatParticipantsResponse.forEach(chatParticipant -> {
System.out.printf("Participant id is %s.\n", ((CommunicationUserIdentifier) chatParticipant.getCommunicationIdentifier()).getId());
});
Aggiungere un utente come partecipante al thread di chat
Twilio
Aggiungere partecipanti a una conversazione usando il metodo Participant.creator().
import com.twilio.rest.conversations.v1.conversation.Participant;
Participant participant = Participant.creator(conversationSid)
.setIdentity("[email protected]")
.create();
System.out.println("Participant SID: " + participant.getSid());
Servizi di comunicazione di Azure
Dopo aver creato un thread di chat, è possibile aggiungere e rimuovere utenti. Aggiungendo utenti, è possibile concedere loro l'accesso per inviare messaggi al thread di chat e aggiungere/rimuovere altri partecipanti. Per iniziare, ottenere un nuovo token di accesso e un'identità per tale utente. Prima di chiamare il addParticipants
metodo, assicurarsi di aver acquisito un nuovo token di accesso e un'identità per tale utente. L'utente deve avere tale token di accesso per inizializzare il client di chat.
Usare il addParticipants
metodo per aggiungere partecipanti al thread.
-
communicationIdentifier
, obbligatorio, è l'oggettoCommunicationIdentifier
creato usandoCommunicationIdentityClient
nella guida introduttiva token di accesso utente. -
displayName
, facoltativo, è il nome visualizzato per il partecipante del thread. -
shareHistoryTime
, facoltativo, è l'ora da cui la cronologia delle chat viene condivisa con il partecipante. Per condividere la cronologia dall'inizio del thread di chat, impostare questa proprietà su qualsiasi data uguale o precedente all'ora di creazione del thread. Per condividere nessuna cronologia precedente all'aggiunta del partecipante, impostarla sulla data corrente. Per condividere una cronologia parziale, impostarla sulla data richiesta.
List<ChatParticipant> participants = new ArrayList<ChatParticipant>();
CommunicationUserIdentifier identity3 = new CommunicationUserIdentifier("<USER_3_ID>");
CommunicationUserIdentifier identity4 = new CommunicationUserIdentifier("<USER_4_ID>");
ChatParticipant thirdThreadParticipant = new ChatParticipant()
.setCommunicationIdentifier(identity3)
.setDisplayName("Display Name 3");
ChatParticipant fourthThreadParticipant = new ChatParticipant()
.setCommunicationIdentifier(identity4)
.setDisplayName("Display Name 4");
participants.add(thirdThreadParticipant);
participants.add(fourthThreadParticipant);
chatThreadClient.addParticipants(participants);