2016-04-16 4 views
2

Innerhalb meiner Python Webapp für die Microsoft Botframework, möchte ich reply to a message mit einem REST API call zu /bot/v1.0/messages.Minimales Beispiel für die Beantwortung einer Nachricht über die REST-API von BotFramework?

Wenn mit dem Emulator auf meinem lokalen Rechner zu experimentieren, wurde mir klar, dass die minimale Nutzlast für den REST-Aufruf etwas wie ist:

{ 
    "text": "Hello, Hello!", 
    "from": { 
    "address": "MyBot" 
    }, 
    "channelConversationId": "ConvId" 
} 

wo "ConvId" ist die ID von meinem lokalen Emulator in der ursprünglichen Nachricht gegeben (Beachten Sie, dass ich channelConversationId nicht conversationId senden muss).

Offensichtlich ist dies nicht genug für die Live-Bot-Connector-Site. Was ist ein (minimales) Beispiel für die Beantwortung einer Nachricht mit dem REST-API-Aufruf /bot/v1.0/messages?

Ich habe verschiedene Nutzdatenverbindung getestet, beispielsweise mit Attributen from, to, channelConversationId, text und language wie in der Dokumentation angegeben. Aber in der Regel bekomme ich einen 500 Fehler:

{ 
    "error": { 
    "message": "Expression evaluation failed. Object reference not set to an instance of an object.", 
    "code": "ServiceError" 
    } 
} 

Als ich versuchte, die ursprüngliche Nachricht zurück zu senden, nur mit to und from getauscht, ich habe einen anderen 500 Fehler:

{ 
    "error": { 
    "code": "ServiceError", 
    "message": "*Sorry, Web Chat is having a problem responding right now.*", 
    "statusCode": 500 
    } 
} 

Antwort

3

Die minimale Nutzlast für eine Inline-Antwort (die als Antwort zurückgegeben wird) lautet:

Wenn Sie eine Antwort auf Out-of-Band-Usi posten ng ein POST zu /bot/v1.0/messages dann sind Sie richtig, Sie brauchen ein wenig mehr. Hier ist, was ich in der Node-Version des Bot Builder SDK tun:

// Post an additional reply 
reply.from = ses.message.to; 
reply.to = ses.message.replyTo ? ses.message.replyTo : ses.message.from; 
reply.replyToMessageId = ses.message.id; 
reply.conversationId = ses.message.conversationId; 
reply.channelConversationId = ses.message.channelConversationId; 
reply.channelMessageId = ses.message.channelMessageId; 
reply.participants = ses.message.participants; 
reply.totalParticipants = ses.message.totalParticipants; 
this.emit('reply', reply); 
post(this.options, '/bot/v1.0/messages', reply, (err) => { 
    if (err) { 
     this.emit('error', err); 
    } 
}); 

eine Antwort auf ein bestehendes Gespräch Senden ist ein wenig kompliziert, weil Sie alle Routing-Bits enthalten müssen benötigt es, um wieder an die Quelle Konversation. ein neues Gespräch zu beginnen ist wesentlich einfacher:

// Start a new conversation 
reply.from = ses.message.from; 
reply.to = ses.message.to; 
this.emit('send', reply); 
post(this.options, '/bot/v1.0/messages', reply, (err) => { 
    if (err) { 
     this.emit('error', err); 
    } 
}); 

Beide Beispiele gehen davon aus, dass reply.text & reply.language bereits eingestellt wurde.

+0

Danke Steven! Was befindet sich in den Eigenschaften "reply.to" und "reply.from"? Sind alle 4 Untereigenschaften erforderlich ('channelId',' address', 'name' und' id')? Vielleicht könnten Sie eine JSON-Repräsentation von "reply" hinzufügen. Danke noch einmal! – Stephan

+0

Danke nochmal Steven, währenddessen wurde die Antwort auf GitHub mit zusätzlichen Infos gepostet. Also habe ich eine neue Antwort geschrieben. – Stephan

2

Inzwischen hat die Antwort auf a GitHub issue geschrieben worden, wiltodelta

Experimentally found necessary parameters for Slack, Skype, Telegram: ... ChannelConversationId only necessary Slack, otherwise the message will be added @userAddress.

Message message = new Message 
{ 
    ChannelConversationId = channelConversationId, 
    From = new ChannelAccount 
    { 
    ChannelId = channelId, 
    Address = botAddress, 
    IsBot = true 
    }, 
    To = new ChannelAccount 
    { 
    ChannelId = channelId, 
    Address = userAddress 
    }, 
    Text = text 
}; 

Besonders zitieren, die Attribute replyToMessageId und channelConversationId (bereits erwähnt) nicht notwendig sind: Sie auf die zuletzt Nachricht verweisen in der Konversation und wird sich somit während eines Gesprächs ändern.

Verwandte Themen