# `A2A.Message`
[🔗](https://github.com/actioncard/a2a-elixir/blob/main/lib/a2a/message.ex#L1)

A single turn of communication between user and agent.

Messages contain typed parts and are identified by role (`:user` or `:agent`).

# `role`

```elixir
@type role() :: :user | :agent
```

# `t`

```elixir
@type t() :: %A2A.Message{
  context_id: String.t() | nil,
  extensions: map(),
  message_id: String.t(),
  metadata: map(),
  parts: [A2A.Part.t()],
  reference_task_ids: [String.t()],
  role: role(),
  task_id: String.t() | nil
}
```

# `new_agent`

```elixir
@spec new_agent(String.t() | [A2A.Part.t()]) :: t()
```

Creates a new agent message from text or parts.

# `new_user`

```elixir
@spec new_user(String.t() | [A2A.Part.t()]) :: t()
```

Creates a new user message from text or parts.

# `text`

```elixir
@spec text(t()) :: String.t() | nil
```

Extracts the text from the first `A2A.Part.Text` part, or `nil` if none.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
