# Go

### Robin for Messaging with Go

Add live messaging to your Go applications with the Core Go SDK. Take advantage of the Robin API and deploy messaging solutions in very little time.

{% embed url="<https://github.com/robin-io/robin.io-go>" %}

### Prerequisites

The following are required to use the SDK:

1. Go 1.1.6 or greater is required
2. API Key - Learn about how to get your API Keys in [Setting up your Robin account](/messaging-with-robin/guides/setting-up-your-robin-account.md)

### Install the Go SDK

```bash
go get robin.io-go
```

## Sending your first message

Follow the step-by-step instructions below to send your first message using the Go SDK

### Step 1: Create a Robin Instance

To create a `Robin` instance, pass the `Secret` as the first argument, and the optional `Tls` argument as the second in the `Robin(Secret, Tls)` constructor.

```go
robin := Robin{
    Secret: "YOUR_API_KEY",
    Tls:    true,
}
```

{% hint style="warning" %}
Initializing the Chat SDK at the top of your Go file is recommended.
{% endhint %}

### Step 2: Connect to Robin Server

You can connect to the Robin server using the `Connect(user_token)` method from the `Robin` instance. If you do not have a [Robin User Token](/messaging-with-robin/guides/what-is-the-robin-user-token-rut.md) (user\_token), you would have to create one. [What is the Robin User Token (RUT)?](/messaging-with-robin/guides/what-is-the-robin-user-token-rut.md)(specific link to create user token) is a good place to start.

```go
// call back for a successful connection
func connected(socket gowebsocket.Socket) {}

// call back for an unsuccessful connection
func disconnected(err error, socket gowebsocket.Socket) {}

// call back for when a message is recieved via the connection
func text_recieved(msg string, socket gowebsocket.Socket) {}

conn, err := robin.Connect(connected, nil, disconnected, text_recieved, nil, nil, nil)

if err != nil {
    println(err)
}
```

{% hint style="info" %}
All messages sent on Robin go through channels, you can learn more about channels on [Robin Fundamentals](/fundamentals.md)
{% endhint %}

### Step 3: Create a Conversation

Before sending a message, you need to create a `Conversation`

```go
conv, err := robin.CreateConversation("SENDER_NAME", "SENDER_TOKEN", "RECEIVER_TOKEN", "RECEIVER_NAME")

if err != nil {
    fmt.Println(err)
}
```

### Step 4: Send a message to Conversation

Now, you can send a message to a conversation with the `robin.SendMessage()` method.

```go
err := robin.SendMessage("CHANNEL_NAME", map[string]interface{} {
    "name":"SENDER_NAME",
    "user_token":"SENDER_TOKEN",
    "msg":"MSG CONTENT",
})
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.robinapp.co/messaging-with-robin/add-messaging-with-core-sdks/go.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
