sig
  type article = {
    id : string;
    title : string;
    input_message_content :
      TelegramApi.InputMessageContent.input_message_content;
    reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
    url : string option;
    hide_url : bool option;
    description : string option;
    thumb_url : string option;
    thumb_width : int option;
    thumb_height : int option;
  }
  type photo = {
    id : string;
    photo_url : string;
    thumb_url : string;
    photo_width : int option;
    photo_height : int option;
    title : string option;
    description : string option;
    caption : string option;
    reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
    input_message_content :
      TelegramApi.InputMessageContent.input_message_content option;
  }
  type gif = {
    id : string;
    gif_url : string;
    gif_width : int option;
    gif_height : int option;
    thumb_url : string;
    title : string option;
    caption : string option;
    reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
    input_message_content :
      TelegramApi.InputMessageContent.input_message_content option;
  }
  type mpeg4gif = {
    id : string;
    mpeg4_url : string;
    mpeg4_width : int option;
    mpeg4_height : int option;
    thumb_url : string;
    title : string option;
    caption : string option;
    reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
    input_message_content :
      TelegramApi.InputMessageContent.input_message_content option;
  }
  type video = {
    id : string;
    video_url : string;
    mime_type : string;
    thumb_url : string;
    title : string;
    caption : string option;
    video_width : int option;
    video_height : int option;
    video_duration : int option;
    description : string option;
    reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
    input_message_content :
      TelegramApi.InputMessageContent.input_message_content option;
  }
  type audio = {
    id : string;
    audio_url : string;
    title : string;
    performer : string option;
    audio_duration : int option;
    reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
    input_message_content :
      TelegramApi.InputMessageContent.input_message_content option;
  }
  type voice = {
    id : string;
    voice_url : string;
    title : string;
    voice_duration : int option;
    reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
    input_message_content :
      TelegramApi.InputMessageContent.input_message_content option;
  }
  type document = {
    id : string;
    title : string;
    caption : string option;
    document_url : string;
    mime_type : string;
    description : string option;
    reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
    input_message_content :
      TelegramApi.InputMessageContent.input_message_content option;
    thumb_url : string option;
    thumb_width : int option;
    thumb_height : int option;
  }
  type location = {
    id : string;
    latitude : float;
    longitude : float;
    title : string;
    reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
    input_message_content :
      TelegramApi.InputMessageContent.input_message_content option;
    thumb_url : string option;
    thumb_width : int option;
    thumb_height : int option;
  }
  type venue = {
    id : string;
    latitude : float;
    longitude : float;
    title : string;
    address : string;
    foursquare_id : string option;
    reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
    input_message_content :
      TelegramApi.InputMessageContent.input_message_content option;
    thumb_url : string option;
    thumb_width : int option;
    thumb_height : int option;
  }
  type contact = {
    id : string;
    phone_number : string;
    first_name : string;
    last_name : string option;
    reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
    input_message_content :
      TelegramApi.InputMessageContent.input_message_content option;
    thumb_url : string option;
    thumb_width : int option;
    thumb_height : int option;
  }
  type cached_photo = {
    id : string;
    photo_file_id : string;
    title : string option;
    description : string option;
    caption : string option;
    reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
    input_message_content :
      TelegramApi.InputMessageContent.input_message_content option;
  }
  type cached_gif = {
    id : string;
    gif_file_id : string;
    title : string option;
    caption : string option;
    reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
    input_message_content :
      TelegramApi.InputMessageContent.input_message_content option;
  }
  type cached_mpeg4gif = {
    id : string;
    mpeg4_file_id : string;
    title : string option;
    caption : string option;
    reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
    input_message_content :
      TelegramApi.InputMessageContent.input_message_content option;
  }
  type cached_sticker = {
    id : string;
    sticker_file_id : string;
    reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
    input_message_content :
      TelegramApi.InputMessageContent.input_message_content option;
  }
  type cached_document = {
    id : string;
    title : string;
    document_file_id : string;
    description : string option;
    caption : string option;
    reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
    input_message_content :
      TelegramApi.InputMessageContent.input_message_content option;
  }
  type cached_video = {
    id : string;
    video_file_id : string;
    title : string;
    description : string option;
    caption : string option;
    reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
    input_message_content :
      TelegramApi.InputMessageContent.input_message_content option;
  }
  type cached_voice = {
    id : string;
    voice_file_id : string;
    title : string;
    reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
    input_message_content :
      TelegramApi.InputMessageContent.input_message_content option;
  }
  type cached_audio = {
    id : string;
    audio_file_id : string;
    reply_markup : TelegramApi.ReplyMarkup.reply_markup option;
    input_message_content :
      TelegramApi.InputMessageContent.input_message_content option;
  }
  type inline_query_result =
      Article of TelegramApi.InlineQuery.Out.article
    | Photo of TelegramApi.InlineQuery.Out.photo
    | Gif of TelegramApi.InlineQuery.Out.gif
    | Mpeg4Gif of TelegramApi.InlineQuery.Out.mpeg4gif
    | Video of TelegramApi.InlineQuery.Out.video
    | Audio of TelegramApi.InlineQuery.Out.audio
    | Voice of TelegramApi.InlineQuery.Out.voice
    | Document of TelegramApi.InlineQuery.Out.document
    | Location of TelegramApi.InlineQuery.Out.location
    | Venue of TelegramApi.InlineQuery.Out.venue
    | Contact of TelegramApi.InlineQuery.Out.contact
    | CachedPhoto of TelegramApi.InlineQuery.Out.cached_photo
    | CachedGif of TelegramApi.InlineQuery.Out.cached_gif
    | CachedMpeg4Gif of TelegramApi.InlineQuery.Out.cached_mpeg4gif
    | CachedSticker of TelegramApi.InlineQuery.Out.cached_sticker
    | CachedDocument of TelegramApi.InlineQuery.Out.cached_document
    | CachedVideo of TelegramApi.InlineQuery.Out.cached_video
    | CachedVoice of TelegramApi.InlineQuery.Out.cached_voice
    | CachedAudio of TelegramApi.InlineQuery.Out.cached_audio
  val create_article :
    id:string ->
    title:string ->
    input_message_content:TelegramApi.InputMessageContent.input_message_content ->
    ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
    ?url:string ->
    ?hide_url:bool ->
    ?description:string ->
    ?thumb_url:string ->
    ?thumb_width:int ->
    ?thumb_height:int ->
    unit -> TelegramApi.InlineQuery.Out.inline_query_result
  val create_photo :
    id:string ->
    photo_url:string ->
    thumb_url:string ->
    ?photo_width:int ->
    ?photo_height:int ->
    ?title:string ->
    ?description:string ->
    ?caption:string ->
    ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
    ?input_message_content:TelegramApi.InputMessageContent.input_message_content ->
    unit -> TelegramApi.InlineQuery.Out.inline_query_result
  val create_gif :
    id:string ->
    gif_url:string ->
    ?gif_width:int ->
    ?gif_height:int ->
    thumb_url:string ->
    ?title:string ->
    ?caption:string ->
    ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
    ?input_message_content:TelegramApi.InputMessageContent.input_message_content ->
    unit -> TelegramApi.InlineQuery.Out.inline_query_result
  val create_mpeg4gif :
    id:string ->
    mpeg4_url:string ->
    ?mpeg4_width:int ->
    ?mpeg4_height:int ->
    thumb_url:string ->
    ?title:string ->
    ?caption:string ->
    ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
    ?input_message_content:TelegramApi.InputMessageContent.input_message_content ->
    unit -> TelegramApi.InlineQuery.Out.inline_query_result
  val create_video :
    id:string ->
    video_url:string ->
    mime_type:string ->
    thumb_url:string ->
    title:string ->
    ?caption:string ->
    ?video_width:int ->
    ?video_height:int ->
    ?video_duration:int ->
    ?description:string ->
    ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
    ?input_message_content:TelegramApi.InputMessageContent.input_message_content ->
    unit -> TelegramApi.InlineQuery.Out.inline_query_result
  val create_audio :
    id:string ->
    audio_url:string ->
    title:string ->
    ?performer:string ->
    ?audio_duration:int ->
    ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
    ?input_message_content:TelegramApi.InputMessageContent.input_message_content ->
    unit -> TelegramApi.InlineQuery.Out.inline_query_result
  val create_voice :
    id:string ->
    voice_url:string ->
    title:string ->
    ?voice_duration:int ->
    ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
    ?input_message_content:TelegramApi.InputMessageContent.input_message_content ->
    unit -> TelegramApi.InlineQuery.Out.inline_query_result
  val create_document :
    id:string ->
    title:string ->
    ?caption:string ->
    document_url:string ->
    mime_type:string ->
    ?description:string ->
    ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
    ?input_message_content:TelegramApi.InputMessageContent.input_message_content ->
    ?thumb_url:string ->
    ?thumb_width:int ->
    ?thumb_height:int ->
    unit -> TelegramApi.InlineQuery.Out.inline_query_result
  val create_location :
    id:string ->
    latitude:float ->
    longitude:float ->
    title:string ->
    ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
    ?input_message_content:TelegramApi.InputMessageContent.input_message_content ->
    ?thumb_url:string ->
    ?thumb_width:int ->
    ?thumb_height:int ->
    unit -> TelegramApi.InlineQuery.Out.inline_query_result
  val create_venue :
    id:string ->
    latitude:float ->
    longitude:float ->
    title:string ->
    address:string ->
    ?foursquare_id:string ->
    ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
    ?input_message_content:TelegramApi.InputMessageContent.input_message_content ->
    ?thumb_url:string ->
    ?thumb_width:int ->
    ?thumb_height:int ->
    unit -> TelegramApi.InlineQuery.Out.inline_query_result
  val create_contact :
    id:string ->
    phone_number:string ->
    first_name:string ->
    ?last_name:string ->
    ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
    ?input_message_content:TelegramApi.InputMessageContent.input_message_content ->
    ?thumb_url:string ->
    ?thumb_width:int ->
    ?thumb_height:int ->
    unit -> TelegramApi.InlineQuery.Out.inline_query_result
  val create_cached_photo :
    id:string ->
    photo_file_id:string ->
    ?title:string ->
    ?description:string ->
    ?caption:string ->
    ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
    ?input_message_content:TelegramApi.InputMessageContent.input_message_content ->
    unit -> TelegramApi.InlineQuery.Out.inline_query_result
  val create_cached_gif :
    id:string ->
    gif_file_id:string ->
    ?title:string ->
    ?caption:string ->
    ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
    ?input_message_content:TelegramApi.InputMessageContent.input_message_content ->
    unit -> TelegramApi.InlineQuery.Out.inline_query_result
  val create_cached_mpeg4gif :
    id:string ->
    mpeg4_file_id:string ->
    ?title:string ->
    ?caption:string ->
    ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
    ?input_message_content:TelegramApi.InputMessageContent.input_message_content ->
    unit -> TelegramApi.InlineQuery.Out.inline_query_result
  val create_cached_sticker :
    id:string ->
    sticker_file_id:string ->
    ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
    ?input_message_content:TelegramApi.InputMessageContent.input_message_content ->
    unit -> TelegramApi.InlineQuery.Out.inline_query_result
  val create_cached_document :
    id:string ->
    title:string ->
    document_file_id:string ->
    ?description:string ->
    ?caption:string ->
    ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
    ?input_message_content:TelegramApi.InputMessageContent.input_message_content ->
    unit -> TelegramApi.InlineQuery.Out.inline_query_result
  val create_cached_video :
    id:string ->
    video_file_id:string ->
    title:string ->
    ?description:string ->
    ?caption:string ->
    ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
    ?input_message_content:TelegramApi.InputMessageContent.input_message_content ->
    unit -> TelegramApi.InlineQuery.Out.inline_query_result
  val create_cached_voice :
    id:string ->
    voice_file_id:string ->
    title:string ->
    ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
    ?input_message_content:TelegramApi.InputMessageContent.input_message_content ->
    unit -> TelegramApi.InlineQuery.Out.inline_query_result
  val create_cached_audio :
    id:string ->
    audio_file_id:string ->
    ?reply_markup:TelegramApi.ReplyMarkup.reply_markup ->
    ?input_message_content:TelegramApi.InputMessageContent.input_message_content ->
    unit -> TelegramApi.InlineQuery.Out.inline_query_result
  val prepare :
    TelegramApi.InlineQuery.Out.inline_query_result -> Yojson.Safe.json
end