docs: def send_invoice(token, chat_id, title, description, invoice_payload, provider_token, currency, prices,
                   start_parameter, photo_url=None, photo_size=None, photo_width=None, photo_height=None,
                   need_name=None, need_phone_number=None, need_email=None, need_shipping_address=None, is_flexible=None,
                   disable_notification=None, reply_to_message_id=None, reply_markup=None, provider_data=None):
      """
      Use this method to send invoices. On success, the sent Message is returned.
      :param token: Bot's token (you don't need to fill this)
      :param chat_id: Unique identifier for the target private chat
      :param title: Product name
      :param description: Product description
      :param invoice_payload: Bot-defined invoice payload, 1-128 bytes. This will not be displayed to the user, use for your internal processes.
      :param provider_token: Payments provider token, obtained via @Botfather
      :param currency: Three-letter ISO 4217 currency code, see https://core.telegram.org/bots/payments#supported-currencies
      :param prices: Price breakdown, a list of components (e.g. product price, tax, discount, delivery cost, delivery tax, bonus, etc.)
      :param start_parameter: Unique deep-linking parameter that can be used to generate this invoice when used as a start parameter
      :param photo_url: URL of the product photo for the invoice. Can be a photo of the goods or a marketing image for a service. People like it better when they see what they are paying for.
      :param photo_size: Photo size
      :param photo_width: Photo width
      :param photo_height: Photo height
      :param need_name: Pass True, if you require the user's full name to complete the order
      :param need_phone_number: Pass True, if you require the user's phone number to complete the order
      :param need_email: Pass True, if you require the user's email to complete the order
      :param need_shipping_address: Pass True, if you require the user's shipping address to complete the order
      :param is_flexible: Pass True, if the final price depends on the shipping method
      :param disable_notification: Sends the message silently. Users will receive a notification with no sound.
      :param reply_to_message_id: If the message is a reply, ID of the original message
      :param reply_markup: A JSON-serialized object for an inline keyboard. If empty, one 'Pay total price' button will be shown. If not empty, the first button must be a Pay button
      :param provider_data:
      :return:
      """
      method_url = r'sendInvoice'
      payload = {'chat_id': chat_id, 'title': title, 'description': description, 'payload': invoice_payload,
                 'provider_token': provider_token, 'start_parameter': start_parameter, 'currency': currency,
                 'prices': _convert_list_json_serializable(prices)}
      if photo_url:
          payload['photo_url'] = photo_url
      if photo_size:
          payload['photo_size'] = photo_size
      if photo_width:
          payload['photo_width'] = photo_width
      if photo_height:
          payload['photo_height'] = photo_height
      if need_name:
          payload['need_name'] = need_name
      if need_phone_number:
          payload['need_phone_number'] = need_phone_number
      if need_email:
          payload['need_email'] = need_email
      if need_shipping_address:
          payload['need_shipping_address'] = need_shipping_address
      if is_flexible:
          payload['is_flexible'] = is_flexible
      if disable_notification:
          payload['disable_notification'] = disable_notification
      if reply_to_message_id:
          payload['reply_to_message_id'] = reply_to_message_id
      if reply_markup:
          payload['reply_markup'] = _convert_markup(reply_markup)
      if provider_data:
          payload['provider_data'] = provider_data
      return _make_request(token, method_url, params=payload)