2017-05-09 47 views
1

我想讓我的機器人發送PDF文件給用戶。我有PDF作爲一個base64字符串,並試圖通過附件發送:Bot Framework:發佈pdf文件

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

在模擬器,它只是不工作,但在渠道電報和Facebook(我需要),機器人只輸出錯誤...

有人已經成功了嗎?

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

+0

其實我這樣做的方式工作,唯一的問題是我的base64字符串太大(太大的文件太大)!由於Telegram應該處理文件直到50MB,這似乎很奇怪... – Ynnad

回答

1

由於這種方法在botframework電話電報sendDocument方法,而這種方法在其document屬性獲取HTTP URL或file_id的,因此您無法將base64String作爲有效的文檔類型傳遞給此方法。

您可以在this link(也參見下圖)中跟蹤傳入電報的文檔的有效類型。

enter image description here

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); 
     } 
    } 
} 
相關問題