Search code examples
botframeworkazure-cognitive-servicesskype-bots

Send an image rather than a link


I'm using the Microsoft Bot Framework with Cognitive Services to generate images from a source image that the user uploads via the bot. I'm using C#.

The Cognitive Services API returns a byte[] or a Stream representing the treated image.

How can I send that image directly to my user? All the docs and samples seem to point to me having to host the image as a publically addressable URL and send a link. I can do this but I'd rather not.

Does anyone know how to simple return the image, kind of like the Caption Bot does?


Solution

  • You should be able to use something like this:

    var message = activity.CreateReply("");
    message.Type = "message";
    
    message.Attachments = new List<Attachment>();
    var webClient = new WebClient();
    byte[] imageBytes = webClient.DownloadData("https://placeholdit.imgix.net/~text?txtsize=35&txt=image-data&w=120&h=120");
    string url = "data:image/png;base64," + Convert.ToBase64String(imageBytes)
    message.Attachments.Add(new Attachment { ContentUrl = url, ContentType = "image/png" });
    await _client.Conversations.ReplyToActivityAsync(message);