2016-04-16 23 views
2

在我的Python webapp的Microsoft Botframework内,我想要reply to a messageREST API call/bot/v1.0/messages通过BotFramework的REST API回复邮件的最小示例?

当我的本地机器上的仿真实验,我意识到,对于REST调用的最小有效载荷是一样的东西:

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

其中"ConvId"是原始消息通过我的本地模拟器给出的ID(请注意,我必须发送channelConversationId而不是conversationId)。

显然,这对于活动的bot连接器站点来说是不够的。但是,如何用REST API调用/bot/v1.0/messages来回复消息的(最小)示例是什么?

我测试不同的有效载荷数据,例如具有如在该文档中指示的属性fromtochannelConversationIdtextlanguage。但通常我得到一个500错误:

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

当我试图发送回原来的消息,只是tofrom交换,我得到了一个不同的500错误:

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

回答

3

的最小有效载荷内联答复(作为答复返回)为:

{ "text": "Hello, Hello!" } 

如果您要发布带外回复usi ng POST到/bot/v1.0/messages那么你是正确的,你需要多一点。下面是我在博特生成器SDK的节点版本做:

// 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); 
    } 
}); 

发送到一个存在的对话的答复是有点复杂,因为你必须包括所有需要的路由比特的得到它回到源会话。开始一个新的对话是显著更容易:

// 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); 
    } 
}); 

两个例子都假定reply.text &​​已经设置。

+0

谢谢史蒂芬!属性'reply.to'和'reply.from'里面有什么?是否需要所有4个子属性('channelId','address','name'和'id')?也许你可以添加'reply'的JSON表示。再次感谢! – Stephan

+0

再次感谢Steven,同时,答案已发布在GitHub上,并附有其他信息。于是我写了一个新的答案。 – Stephan

2

同时,答案已发到a GitHub issue,引用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 
}; 

特别的属性replyToMessageIdchannelConversationId(前面提到的)是没有必要的:指最后看到消息中的谈话,并因此会在谈话中改变。