docs: def add_remote_link(self, issue, destination, globalId=None, application=None, relationship=None):
          """Add a remote link from an issue to an external application and returns a remote link Resource for it.
  
          ``object`` should be a dict containing at least ``url`` to the linked external URL and
          ``title`` to display for the link inside JIRA.
  
          For definitions of the allowable fields for ``object`` and the keyword arguments ``globalId``, ``application``
          and ``relationship``, see https://developer.atlassian.com/display/JIRADEV/JIRA+REST+API+for+Remote+Issue+Links.
  
          :param issue: the issue to add the remote link to
          :param destination: the link details to add (see the above link for details)
          :param globalId: unique ID for the link (see the above link for details)
          :param application: application information for the link (see the above link for details)
          :param relationship: relationship description for the link (see the above link for details)
          """
          try:
              applicationlinks = self.applicationlinks()
          except JIRAError as e:
              applicationlinks = []
              # In many (if not most) configurations, non-admin users are
              # not allowed to list applicationlinks; if we aren't allowed,
              # let's let people try to add remote links anyway, we just
              # won't be able to be quite as helpful.
              warnings.warn(
                  "Unable to gather applicationlinks; you will not be able "
                  "to add links to remote issues: (%s) %s" % (
                      e.status_code,
                      e.text),
                  Warning)
  
          data = {}
          if isinstance(destination, Issue):
  
              data['object'] = {
                  'title': str(destination),
                  'url': destination.permalink()}
  
              for x in applicationlinks:
                  if x['application']['displayUrl'] == destination._options['server']:
                      data['globalId'] = "appId=%s&issueId=%s" % (
                          x['application']['id'], destination.raw['id'])
                      data['application'] = {
                          'name': x['application']['name'], 'type': "com.atlassian.jira"}
                      break
              if 'globalId' not in data:
                  raise NotImplementedError(
                      "Unable to identify the issue to link to.")
          else:
  
              if globalId is not None:
                  data['globalId'] = globalId
              if application is not None:
                  data['application'] = application
              data['object'] = destination
  
          if relationship is not None:
              data['relationship'] = relationship
  
          # check if the link comes from one of the configured application links
          for x in applicationlinks:
              if x['application']['displayUrl'] == self._options['server']:
                  data['globalId'] = "appId=%s&issueId=%s" % (
                      x['application']['id'], destination.raw['id'])
                  data['application'] = {
                      'name': x['application']['name'], 'type': "com.atlassian.jira"}
                  break
  
          url = self._get_url('issue/' + str(issue) + '/remotelink')
          r = self._session.post(
              url, data=json.dumps(data))
  
          remote_link = RemoteLink(
              self._options, self._session, raw=json_loads(r))
          return remote_link