lib/intercom/events.ex

defmodule Intercom.Events do
  @moduledoc """
  Provides functionality for managing events.

  See https://developers.intercom.com/intercom-api-reference/reference#event-model
  """

  @doc """
  Submits one event.

  Arguments:
  - `contact_id`: The id generated by intercom for the contact.
  - `event_name`: Arbitrary event name.
  - `created_at`: `DateTime` at which the event occured. (Optional).

  Returns `{:ok, data, metadata}` or `{:error, error_code, metadata}`.
  """
  def submit(contact_id, event_name) do
    submit(contact_id, event_name, DateTime.utc_now())
  end

  def submit(contact_id, event_name, %DateTime{} = created_at) do
    Intercom.API.call_endpoint(:post, "events", %{
      id: contact_id,
      event_name: event_name,
      created_at: created_at |> DateTime.to_unix()
    })
  end
end