Bot框架:发布pdf文件

时间:2017-05-09 09:33:23

标签: botframework telegram-bot

我希望我的机器人向用户发送pdf文件。我将pdf作为base64字符串并尝试通过附件发送它:

Attachment attachment1 = new Attachment();
attachment1.Name = "name.pdf";
attachment1.ContentType = "application/pdf";
attachment1.ContentUrl = "data:application/pdf;base64," + base64String;

var m = context.MakeMessage();
m.Attachments.Add(attachment1);
m.Text = "File";

await context.PostAsync(m);

在模拟器中,它只是不起作用,但在Telegram和Facebook(我需要)的频道中,机器人只输出错误...

有人已经成功吗?

注意:使用http地址工作正常,但我需要使用base64字符串

2 个答案:

答案 0 :(得分:1)

由于botframework中的此方法调用Telegram的sendDocument方法,并且此方法在其document属性中获取http url或file_id,因此您无法将base64String作为有效文档传递给此方法类型。

您可以按照this link中传入电报的有效文件类型(另请参见下图)。

enter image description here

答案 1 :(得分:0)

pdf文件必须是嵌入式资源。希望它有所帮助。

if (this.channelid == "telegram")
{
    var url = string.Format("https://api.telegram.org/bot{0}/sendDocument", Settings.tokentelegram);

    Assembly _assembly;
    Stream file;

    using (var form = new MultipartFormDataContent())
    {
        form.Add(new StringContent(this.chat_id, Encoding.UTF8), "chat_id");

        _assembly = Assembly.GetExecutingAssembly();
        file = _assembly.GetManifestResourceStream("Namespace.FolderResourses.name.pdf);

        form.Add(new StreamContent(file), "document", "name.pdf");

        using (var client = new HttpClient())
        {
            await client.PostAsync(url, form);
        }
    }
}