Skip to content

Karim-W/go-azure-communication-services

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

46 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

go-azure-communication-services

UNOFFICIAL GoLang SDK for Azure Communication Services with support for identity and rooms and ChatThreads.

usage

get the package

go get github.com/karim-w/go-azure-communication-services

import the package

import (
  "github.com/karim-w/go-azure-communication-services/rooms"
  "github.com/karim-w/go-azure-communication-services/identity"
  "github.com/karim-w/go-azure-communication-services/chat"
)

create an identity client

resourceHost := "my-resource.communication.azure.com" // microsoft calls this endpoint
accessKey := "my-access-key"

roomsClient := rooms.NewClient(resourceHost, accessKey)
identityClient := identity.NewClient(resourceHost, accessKey)

identity

create identity

identity, err := identityClient.CreateIdentity(
context.Background(),
&identity.CreateIdentityOptions{
  CreateTokenWithScopes: []string{"chat"},
  ExpiresInMinutes:      60,
},
)

issue access token

token, err := identityClient.IssueAccessToken(
context.Background(),
acsId,
&identity.IssueAccessTokenOptions{
  Scopes: []string{"chat"},
  ExpiresInMinutes:      60,
},
)

revoke access token

err := identityClient.RevokeAccessToken(
context.Background(),
acsId,
)

delete identity

err := identityClient.DeleteIdentity(
context.Background(),
acsId,
)

rooms

create room

room, err := roomsClient.CreateRoom(
  context.Background(),
  &rooms.CreateRoomOptions{
    ValidFrom: time.Now(),
    ValidUntil: time.Now().Add(time.Hour * 24),
    RoomJoinPolicy: "InviteOnly",
    Participants: []rooms.RoomParticipant{
      CreateRoomParticipant(id, PRESENTER),
      CreateRoomParticipant(id, ATTENDEE),
    },
  },
)

get room

room, err := roomsClient.GetRoom(
  context.Background(),
  roomId,
)

update room

room, err := roomsClient.UpdateRoom(
  context.Background(),
  roomId,
  &rooms.UpdateRoomOptions{
    ValidFrom: time.Now(),
    ValidUntil: time.Now().Add(time.Hour * 24),
    RoomJoinPolicy: "InviteOnly",
  },
)

delete room

err := roomsClient.DeleteRoom(
  context.Background(),
  roomId,
)

get room participants

participants, err := roomsClient.GetRoomParticipants(
  context.Background(),
  roomId,
)

add room participants

participants, err := roomsClient.AddRoomParticipants(
  context.Background(),
  roomId,
  CreateRoomParticipant(id, PRESENTER),
  CreateRoomParticipant(id, ATTENDEE),
)

remove room participants

err := roomsClient.RemoveRoomParticipants(
  context.Background(),
  roomId,
  RemoveRoomParticipant(id),
)

Update room participants

participants, err := roomsClient.UpdateRoomParticipants(
  context.Background(),
  roomId,
  CreateRoomParticipant(id, PRESENTER),
)

Please Refer to the tests for more examples on how to use the rooms SDK.

ChatThreads

Create ChatThread

chatThread, err := chatClient.CreateChatThread(
  context.Background(),
 "test",
 ChatUser{ID: id, DisplayName: "test"},
 ChatUser{ID: id2, DisplayName: "test2"},
)

Delete ChatThread

err := chatClient.DeleteChatThread(
  context.Background(),
  chatThreadId,
)

Add ChatThread Participants

participants, err := chatClient.AddChatParticipants(
  context.Background(),
  chatThreadId,
  ChatUser{ID: id, DisplayName: "test"},
  ChatUser{ID: id2, DisplayName: "test2"},
)

Remove ChatThread Participants

err := chatClient.RemoveChatParticipant(
  context.Background(),
  chatThreadId,
  id,
)

Emails

Send Email

 client := emails.NewClient(host, key, nil)
 payload := emails.Payload{
  Headers: emails.Headers{
   ClientCorrelationID:    "1234",
   ClientCustomHeaderName: "ClientCustomHeaderValue",
  },
  SenderAddress: "<ACS_EMAIL>"
  Content: emails.Content{
   Subject:   "Test email",
   PlainText: "This is a test email",
  },
  Recipients: emails.Recipients{
   To: []emails.ReplyTo{
    {
     Address: "<EMAIL_ADDRESS>",
    },
   },
  },
 }
 result, err := client.SendEmail(context.TODO(), payload)

References

License

BSD 3-Clause License

Author

karim-w

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

About

Golang Implementaion of the azure communication services REST APIs

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages